2016-05-12 20 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