我在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轴上稍微向左或向右移动?
答案 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 = dodge
或position = 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)))