geom_area在临界水平以上时填充颜色不同

时间:2017-03-30 20:44:35

标签: r ggplot2

我试图让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,因为当下一个值低于最大值时,色带边缘直接到达下一个点,这会扰乱分裂。

SamplePlot

这正在密切地绘制代码告诉它的内容,因此我必须使用错误的方法来创建颜色分割,但无法弄清楚如何正确地进行分割。

1 个答案:

答案 0 :(得分:4)

快速解决方法是使用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()

enter image description here