2016-05-12 66 views
4

当映射颜色以GGPLOT2系,例如:彩色线按值对平均值在GGPLOT2

x = data.frame(x = 1:6, y = c(0,0,10,10,0,0)) 
ggplot(x, aes(x, y, col=y)) + geom_line(size=5) 

enter image description here

..行颜色映射到每个线段的第一数据点。是否有任何简单的方法可以让ggplot计算两个点的平均值(即,斜线都缩放到5的颜色)?

+0

大约两点之间计算平均值,并使用该列指定的颜色是什么? – jazzurro

+0

当然,但是当对多行进行子集化时,这取决于你的数据结构。猜猜我是懒惰的,但我只是想知道是否有ggplot解决方案。 – geotheory

+0

对于给定的数据,我认为这两个答案正在完成这项工作。 'temp < - mutate(x,foo =(lead(y,default = 0)+ y)/ 2); ggplot(temp,aes(x = x,y = y,col = foo))+ geom_line(size = 5)'会做同样的工作。如果你有更复杂的情况,我认为值得在你的问题中增加更多描述。 – jazzurro

回答

4

类似想法@Richard,但使用zoo包。

library(zoo) 
x = data.frame(x = 1:6, y = c(0,0,10,10,0,0)) 
ggplot(x, aes(x, y, col=rollmean(y, 2, fill = 0))) + geom_line(size=5) 

enter image description here

+0

更容易包装成ggplot,所以我认为这是答案,谢谢 – geotheory

4

这是做你想做的吗?

x = data.frame(x = 1:6, y = c(0,0,10,10,0,0)) 
x$c <- rowMeans(cbind(x$y, c(x$y[-1], NA))) 
ggplot(x, aes(x, y, col=c)) + geom_line(size=5) 
+0

优雅的方式来计算中间值 – geotheory