gpt4 book ai didi

r - geom_points 的选择性抖动

转载 作者:行者123 更新时间:2023-12-01 09:44:06 25 4
gpt4 key购买 nike

我有一个 ggplot,其中一些点与其他一些点重叠。我想知道是否有办法将点放在另一个之上。就我而言,最多有 2 个点重叠。

x=c(1,1,2,3,4,4)
y=c('a1','a1','a2','a3','a4','a4')
type = c('A','B','C','A','B','C')

data = as.data.frame(cbind(x,y,type))

ggplot() + geom_point(data = data, aes(x=x,y=y, color = type, fill = type), size = 2, shape = 25)

enter image description here

在这里我们看到点 x=1 and y=a1 type A正坐在下面 type B但我最想要的是 Type B垂直移动一点。

如果我使用抖动,所有东西都会被移位,包括没有重叠的点。

最佳答案

我们可以使用 duplicated或任何类似的函数来检测重叠,然后我们可以使用带有 jitter 的 R 索引有选择地应用抖动。

我把它写成一个函数:

selective_jitter <- function(x, # x = x co-ordinate
y, # y = y co-ordinate
g # g = group
){
x <- as.numeric(x)
y <- as.numeric(y)
a <- cbind(x, y)
a[duplicated(a)] <- jitter(a[duplicated(a)], amount = .15) # amount could be made a parameter

final <- cbind(a, g)
return(final)
}


data <- as.data.frame(selective_jitter(data$x, data$y, data$type))

ggplot() + geom_point(data = data, aes(x=x,y=y, color = g, fill = type), size = 2, shape = 25)

enter image description here

有很多方法可以以不同的方式编写或调整它。例如,我认为一个非常好的调整是为 amount 添加一个可选参数。 jitter() 的选项.

另一个潜在的改进是使用卡尺来查找(接近)重复项以及精确的重复项(而 duplicated 只会找到精确的重复项)。

最后一点 - 有时当我这样做时,我喜欢使用半透明的颜色而不是 jitter .这种变化只有在系列数( type )很小的情况下才能很好地工作,这样你就可以做一些事情,比如有 1 个黄色系列,1 个蓝色系列,然后它们的重叠是绿色的(Stack Overflow 上有现有的解决方案) ) 证明如果你有兴趣。

关于r - geom_points 的选择性抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930139/

25 4 0
文章推荐: java - 是否可以围绕折线创建轮廓
文章推荐: java - 如何通过使用 Java8 Stream 从对象中获取多个字段值来从 List 创建 HashSet?