R:如何相对于x轴扩展(抖动)点?

时间:2015-07-14 12:00:19

标签: r ggplot2 jitter

我在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轴上稍微向左或向右移动?

3 个答案:

答案 0 :(得分:14)

这可以通过使用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)) 

答案 1 :(得分:4)

ggplot2现在包含position_dodge()。根据帮助说明:&#34; Dodging在调整水平位置时保留geom的垂直位置。&#34;

因此,您可以将其用作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)

答案 2 :(得分:0)

ggplot2现在有一个单独的geom,称为geom_jitter,因此您不需要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)))