抖动geom_line()

Eri*_*ail 18 plot r ggplot2

有没有办法抖动线路geom_line()?我知道它有点违背了这个情节的目的,但如果你有一个几行的情节,并希望它们都表明它可以很方便.也许这个可见性问题的其他解决方案.

请参阅下面的代码, 抖动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)
Run Code Online (Sandbox Code Playgroud)

bap*_*ste 26

你可以试试

geom_line(position=position_jitter(w=0.02, h=0))
Run Code Online (Sandbox Code Playgroud)

并看看它是否运作良好.


fle*_*ive 16

如果你只想防止两条线完全重叠,现在有一种更好的方法:position_dodge(),它"通过避开重叠来调整位置".这比向任何线路添加抖动更好,即使不需要它也是如此.

使用position_dodge()避免ggplot2行完全重叠

代码示例:

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));
Run Code Online (Sandbox Code Playgroud)

多亏了position_dodge(),我们现在可以看到情节中有两条线,恰好恰好包含在内:

使用position_doge防止ggplot中的行重叠


Car*_*oft 5

我倾向于使用不同的线条样式,例如,蓝色实线“透过”其顶部的红色虚线。话又说回来,这确实取决于你想向读者传达什么。首先要记住,数据应该是点和理论线,除非这会让事情变得混乱。除非 yx 值相同,否则会更容易看到这些点。(或者您可以将现有jitter函数应用于 x 值)接下来,如果您只想显示哪些运行在“捆绑”中以及哪些是离群值,则重叠并不重要,因为两个离群值不太可能接近-平等的。

如果您想显示一堆接近相等的运行,您可能更喜欢(也就是说,您的读者会更好地理解)根据平均值而不是实际值绘制增量。