如果我没有样本或分布,但知道 y、ymin 和 ymax,如何使用 geom_lineribbon 制作渐变?

问题描述 投票:0回答:1

我正在尝试绘制一条预测线及其周围的不确定带,但我希望该带具有梯度(接近线的黑色,带末端的浅色)。我发现 geom_lineribbon() 是为此开发的,但似乎只有在我有样本数据或分析分布时才有效。我看到它接受美学 ymin 和 ymax,我用它们成功地制作了乐队,但我无法获得乐队中的渐变。 有谁知道该怎么做吗?

(示例)数据包含以下变量:

  • x
  • y(中线)
  • ymin(下边界带)
  • ymax(上边界带)

例如:

x <- seq(0.2, 2.5, by = 0.1)
y <- 2*x +1
ymin <- 1.5*x + 0.5
ymax <- 1.5*x + 2.5

df <- data.frame(x = x,
                 y = y,
                 ymin = ymin,
                 ymax = ymax)

然后我可以使用以下代码制作线条和不确定性带,但它只给我一个灰色带,没有渐变:

ggplot(data = df,
         mapping = aes(x = x, y = y,
                       ymin = ymin, ymax = ymax)) + 
  geom_lineribbon() +
  scale_fill_brewer() 

我希望scale_fill_brewer() 会包含一些颜色,但事实并非如此。我认为我需要指定 .width,但如果我没有样本/分布而只有边界,我不知道该怎么做。我原以为 geom_lineribbon() 可以做到这一点,因为它需要美学 ymin 和 ymax,但我找不到这样的例子,而且我尝试的各种 fill / fill_ramp 组合都不起作用。

r ggplot2 gradient geom-ribbon ggdist
1个回答
0
投票

您可以将功能区基于正态分布,其中 ymax 和 ymin 值任意为 2 个标准差。然后简单地叠加许多具有较小透明度值的丝带:

library(ggplot2)

ggplot(df, aes(x, y)) +
  lapply(qnorm(seq(0.5, pnorm(2), length = 100))/2, function(i) {
    geom_ribbon(aes(ymin = y - i*(y - ymin), ymax = y + i*(ymax - y)),
                fill = "blue4", alpha = 0.01)
  }) +
  geom_line(color = "blue4", linewidth = 1) +
  theme_minimal(base_size = 16)

© www.soinside.com 2019 - 2024. All rights reserved.