【问题标题】:geom_area different fill colour when above critical levelgeom_area 高于临界水平时不同的填充颜色
【发布时间】:2017-03-30 20:44:34
【问题描述】:

我正在尝试让 geom_area 具有取决于 Y 轴值的双色。

例如,如果我们有一个最大 X 值为 50 的 geom_area,我希望填充颜色在低于 10 时为蓝色,在高于 10 时为红色。

样本数据;

df <- data.frame(
  y = sample(1:50),
  x = sample(1:50)
)

到目前为止,我设法得到的最接近的是使用以下代码;

ggplot(data = df, aes(x = x)) + 
  geom_area(aes(y = y),fill = "red") +
  geom_ribbon(aes(ymin = 0, ymax = ifelse(y >= 10,10,y)),fill = "blue")

这几乎可以满足我的要求,但问题是水平分割并未完全穿过 geom_area,因为当下一个值低于最大值时,功能区的边缘会直接到达下一个点,这会扰乱分裂。

这正是代码告诉它的内容,所以我必须使用错误的方法来创建颜色分割,但无法弄清楚如何正确地做到这一点。

【问题讨论】:

标签: r ggplot2


【解决方案1】:

快速解决方法是使用approx 在 x 值之间进行插值。将 n 参数(插值点的数量)设置为足够高的值,以使蓝色一直穿过:

ggplot(data = as.data.frame(approx(df,n=1000)), aes(x = x)) + 
  geom_area(aes(y = y),fill = "red") +
  geom_ribbon(aes(ymin = 0, ymax = ifelse(y >= 10,10,y)),fill = "blue") +
  theme_classic()

【讨论】:

  • 这实际上非常接近我的需要,但是,我想我可能有一个更好的主意。我应该能够将观察结果子集到 Y 值与水平水平相交的位置。一旦我有两个点,我就可以计算斜率和截距。然后我可以使用 geom_ribbon 上的截距值来进行正确的填充。不完全确定解决此问题的好方法或是否可行,因此我们将很高兴提出任何建议。
  • @aosmith 评论中的链接答案有这样做的代码。
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多