geom_area 高于临界水平时不同的填充颜色

red*_*981 5 r ggplot2

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

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

样本数据;

df <- data.frame(
  y = sample(1:50),
  x = sample(1:50)
)
Run Code Online (Sandbox Code Playgroud)

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

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")
Run Code Online (Sandbox Code Playgroud)

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

样本图

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

eip*_*i10 4

一个快速修复方法是使用 来在 x 值之间进行插值approx。将参数(插值点的数量)设置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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述