GGplot geom_ribbon -仅两点之间的颜色

jei2mxaa  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(124)

我有两组数据(称为L.MEANP.MEAN)在同一图上绘制为2条线(用相同的x轴,时间)。我想给行与下行之间的空间上色(P.MEAN)和x轴,但仅在x的一定范围内(在WITWOT之间)。为了清楚起见,WITWOT只是我通过which()函数获得的数字。
这是我写的:

library(ggplot2)
library(tidyverse)
data %>% ggplot(aes(x = Time)) +
  geom_line(aes(y = L.MEAN, color = "deepskyblue3"), linewidth = 1) +
  geom_line(aes(y = P.MEAN, color = "deeppink"), linewidth = 1) +
  geom_ribbon(aes(ymin = P.MEAN,
                  ymax = L.MEAN,
                  xmin = WIT,
                  xmax = WOT),
              alpha = 0.4,
              fill = "deepskyblue") +
  geom_ribbon(aes(ymin = 0,
                  ymax = P.MEAN,
                  xmin = WIT,
                  xmax = WOT),
              alpha = 0.4,
              fill = "deeppink")

字符串
不幸的是,它似乎不起作用,因为它对整个x轴进行着色。

有人能告诉我我做错了什么吗?

vaqhlq81

vaqhlq811#

如果你只想给图表的一个范围上色,那么你必须过滤geom_ribbon所用的数据以获得所需的范围。另外,我通过scale_color_manual设置颜色来固定线条的颜色分配。
使用一些伪造的随机示例数据:

library(ggplot2)

set.seed(123)
data <- data.frame(
  Time = seq_len(125),
  L.MEAN = runif(125, 50, 100),
  P.MEAN = runif(125, 25, 50)
)

WIT <- 35
WOT <- 70

ggplot(data, aes(x = Time)) +
  geom_line(aes(y = L.MEAN, color = "lmean"), linewidth = 1) +
  geom_line(aes(y = P.MEAN, color = "pmean"), linewidth = 1) +
  geom_ribbon(
    data = ~ subset(.x, Time >= WIT & Time <= WOT),
    aes(
      ymin = P.MEAN,
      ymax = L.MEAN
    ),
    alpha = 0.4,
    fill = "deepskyblue"
  ) +
  geom_ribbon(
    data = ~ subset(.x, Time >= WIT & Time <= WOT),
    aes(
      ymin = 0,
      ymax = P.MEAN
    ),
    alpha = 0.4,
    fill = "deeppink"
  ) +
  scale_color_manual(
    values = c(lmean = "deepskyblue", pmean = "deeppink")
  )

字符串


的数据

相关问题