我有一个带有3个ribbon的ggplot。我可以使用以下代码生成此图:
library(ggplot2)
library(RColorBrewer)
data <- data.frame(
date = seq.Date(as.Date("2018-01-01"), as.Date("2018-01-31"), by= "days"),
value = runif(min = 0, max = 1, n = 31)
)
breaks <- c(0.1, 0.2, 0.3)
reds <- brewer.pal(3, "Reds")
pl <- ggplot2::ggplot(data = data,
aes(x = date, y = value)) +
geom_ribbon(
aes(
x = date,
ymin = value * (1 - breaks[1]),
ymax = value * (1 + breaks[1])
),
fill = reds[3],
alpha = 0.4
) +
geom_ribbon(
aes(
x = date,
ymin = value * (1 - breaks[2]),
ymax = value * (1 + breaks[2])
),
fill = reds[2],
alpha = 0.4
) +
geom_ribbon(
aes(
x = date,
ymin = value * (1 - breaks[2]),
ymax = value * (1 + breaks[2])
),
fill = reds[1],
alpha = 0.4
) +
geom_line(size = 1); pl
这个工作完美,做我想要的。
我的问题是如何将代码中的丝带数量进行概括。如果我想添加一个新的丝带,我可以复制/粘贴我的代码,但这不是我想要的...我只想扩展breaks-vector(c(0.1,0.2,0.3,0.4)),然后图应该自动包含4个丝带(甚至更多)。在我的情况下,后面的图将由一个函数生成。这个函数应该只包含断点(和数据)作为参数。
我认为我可以通过在geom_ribbon周围使用for循环,并将结果存储在列表中来实现这一点。但我没有成功:-(
有人有什么想法吗?提前谢谢大家!