我想制作一个点范围图,使得不同分组的点不会叠在一起。这个图应该看起来像这样:。
我尝试使用dodge参数中的向量来实现闪避:
library(ggplot2)
dat <- structure(list(Treatment = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
Temp = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L,
2L, 2L), .Label = c("10", "20"), class = "factor"), Rep = c(1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), Meas = c(3L,
2L, 2L, 2L, 6L, 4L, 4L, 3L, 5L, 1L, 2L, 3L), SD = c(2L, 3L,
2L, 2L, 2L, 3L, 2L, 3L, 3L, 3L, 2L, 1L)), .Names = c("Treatment",
"Temp", "Rep", "Meas", "SD"), row.names = c(NA, -12L), class = "data.frame")
ggplot(dat, aes(x = Treatment, y = Meas, ymin = Meas - SD/2, ymax = Meas + SD/2)) +
geom_linerange(aes(color = Temp), position=position_dodge(width=c(0.6,0.4)), size = 1, alpha = 0.5) +
geom_point(aes(color = Temp, shape = Temp), position=position_dodge(width=c(0.6,0.4)), size = 3) +
theme_bw()
这导致产生下面所示的图。然而,并非所有点都被闪避,我必须在Illustrator中移动点和误差线,以得到上面所示的图。是否有一种方法可以在两个层次上使用ggplot2
的闪避参数?
Rep
指定为分组变量,则可以获得稍微更好的结果,例如ggplot(dat, aes(x = Treatment, y = Meas, ymin = Meas - SD/2, ymax = Meas + SD/2, group = Rep))
,但仍不是最佳选择。此外,您还可以通过使用geom_pointrange
来简化调用,例如geom_pointrange(aes(color = Temp, shape = Temp), position=position_dodge(width=c(0.6,0.4)), size = 1, alpha = 0.7)
。 - Andy W