有没有办法抖动线路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(),它"通过避开重叠来调整位置".这比向任何线路添加抖动更好,即使不需要它也是如此.
代码示例:
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(),我们现在可以看到情节中有两条线,恰好恰好包含在内:
我倾向于使用不同的线条样式,例如,蓝色实线“透过”其顶部的红色虚线。话又说回来,这确实取决于你想向读者传达什么。首先要记住,数据应该是点和理论线,除非这会让事情变得混乱。除非 y和x 值相同,否则会更容易看到这些点。(或者您可以将现有jitter函数应用于 x 值)接下来,如果您只想显示哪些运行在“捆绑”中以及哪些是离群值,则重叠并不重要,因为两个离群值不太可能接近-平等的。
如果您想显示一堆接近相等的运行,您可能更喜欢(也就是说,您的读者会更好地理解)根据平均值而不是实际值绘制增量。
| 归档时间: |
|
| 查看次数: |
11879 次 |
| 最近记录: |