【问题标题】:Colour lines by mean of value pairs in ggplot2通过 ggplot2 中的值对平均颜色线
【发布时间】:2016-09-08 06:46:35
【问题描述】:

将颜色映射到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)

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

【问题讨论】:

  • 计算两点之间的平均值并使用该列分配颜色怎么样?
  • 当然可以,但是在为多行设置子集时会变得很棘手,具体取决于您的数据结构。我想我很懒,但我只是想知道是否有 ggplot 解决方案..
  • 有了给定的数据,我认为这两个答案都在起作用。 temp <- mutate(x, foo = (lead(y, default = 0) + y) / 2); ggplot(temp, aes(x = x, y = y, col = foo)) + geom_line(size=5) 会做同样的工作。如果您有更复杂的情况,我认为值得在您的问题中添加更多描述。

标签: r ggplot2


【解决方案1】:

与@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)

【讨论】:

  • 更容易包装到 ggplot 所以我认为这就是答案,谢谢
【解决方案2】:

这是你想要的吗?

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)

【讨论】:

  • 计算中间值的优雅方法
猜你喜欢
  • 1970-01-01
  • 2012-07-02
  • 2015-09-25
  • 2021-08-28
  • 1970-01-01
  • 2011-02-02
  • 2011-07-30
  • 1970-01-01
相关资源
最近更新 更多