R:如何相对于 x 轴传播(抖动)点?

R: How to spread (jitter) points with respect to the x axis?

我在 R 中有以下代码片段:

dat <- data.frame(cond = factor(rep("A",10)), 
                  rating = c(1,2,3,4,6,6,7,8,9,10))
ggplot(dat, aes(x=cond, y=rating)) +
  geom_boxplot() + 
  guides(fill=FALSE) +
  geom_point(aes(y=3)) +
  geom_point(aes(y=3)) +
  geom_point(aes(y=5))

这个特定的代码片段生成一个箱线图,其中一个点超过另一个点(在上述情况下,一个点 3 超过另一个点 3)。

如何移动点 3,使其在 y 轴上保持在同一位置,但在 x 轴上稍微向左或向右移动?

这可以通过使用position_jitter函数来实现:

geom_point(aes(y=3), position = position_jitter(w = 0.1, h = 0))

更新: 要仅绘制提供的三个点,您可以构建一个新数据集并绘制:

points_dat <- data.frame(cond = factor(rep("A", 3)), rating = c(3, 3, 5))                  
ggplot(dat, aes(x=cond, y=rating)) +
  geom_boxplot() + 
  guides(fill=FALSE) +
  geom_point(aes(x=cond, y=rating), data = points_dat, position = position_jitter(w = 0.05, h = 0)) 

ggplot2 现在包括 position_dodge()。根据帮助的描述:“Dodging 在调整水平位置时保留 geom 的垂直位置。

因此你可以将它用作 geom_point(position = position_dodge(0.5)) 或者,如果你想躲避由线连接的点并且需要躲避在两个 geom 之间是相同的,你可以使用类似的东西:

dat <- data.frame(cond = rep(c("A", "B"), each=10), x=rep(1:10, 2), y=rnorm(20))
dodge <- position_dodge(.3) # how much jitter on the x-axis?
ggplot(dat, aes(x, y, group=cond, color=cond)) + 
  geom_line(position = dodge) + 
  geom_point(position = dodge)

ggplot2 现在有一个名为 geom_jitter 的单独 geom,因此您不需要 position = dodgeposition = position_dodge()) 参数。这里适用于 OP 的示例:

dat <- data.frame(cond = factor(rep("A",10)), 
                  rating = c(1,2,3,4,6,6,7,8,9,10))
ggplot(dat, aes(x=cond, y=rating)) +
  geom_boxplot() + 
  guides(fill=FALSE) +
  geom_jitter(aes(y=c(3, 3, 5)))