有没有办法抖动geom_line()
中的行?我知道它有点违背了这个情节的目的,但如果你有一个几行的情节,并希望它们都表明它可以很方便。可能是此可见性问题的其他解决方案。
请参阅下面的代码,
A <- c(1,2,3,5,1)
B <- c(3,4,1,2,3)
id <- 1:5
df <- data.frame(id, A, B)
# install.packages(reshape2)
require(reshape2) # for melt
dfm <- melt(df, id=c("id"))
# install.packages(ggplot2)
require(ggplot2)
p1 <- ggplot(data = dfm, aes(x = variable, y = value, group = id,
color= as.factor(id))) + geom_line() + labs(x = "id # 1 is hardly
visible as it is covered by id # 5") + scale_colour_manual(values =
c('red','blue', 'green', 'yellow', 'black'))
p2 <- ggplot(subset(dfm, id != 5), aes(x = variable, y = value,
group = id, color= as.factor(id))) + geom_line() + labs(x = "id #
5 removed, id # 1 is visible") + scale_colour_manual(values =
c('red','blue', 'green', 'yellow', 'black'))
# install.packages(RODBC)
require(gridExtra)
grid.arrange(p1, p2)
答案 0 :(得分:24)
你可以尝试
geom_line(position=position_jitter(w=0.02, h=0))
看看它是否运作良好。
答案 1 :(得分:14)
如果你只是想防止两条线完全重叠,现在有一种更好的方法:position_dodge(),“通过避开重叠来调整位置”。这比向任何线路添加抖动更好,即使它不需要也是如此。
代码示例:
df<-data.frame(x=1:10,y=1:10,z=1:10);
df.m <- melt(df, id.vars = "x");
ggplot(df.m, aes(x=x,y=value,group=variable,colour=variable))
+ geom_line(position=position_dodge(width=0.2));
感谢position_dodge()
,我们现在可以看到情节中有两行,这恰好恰好包含在内:
答案 2 :(得分:4)
我倾向于使用不同的线条样式,例如,一条蓝色的实线“透过”它上方的红色虚线。
然后,它确实取决于你想要给读者的东西。首先要记住数据应该是点和理论行,除非这会使事情变得混乱。除非y 和 x值相同,否则更容易看到这些点。 (或者您可以将现有的jitter
函数应用于x值)
接下来,如果您只想显示哪些运行在“捆绑”中并且哪些是异常值,则重叠无关紧要,因为两个异常值几乎不可能相等。
如果你想展示一堆接近平等的运行,你可能更愿意(也就是说,你的读者会更好地理解)将增量与平均值而不是实际值进行对比。