【发布时间】:2019-03-11 07:22:36
【问题描述】:
我有一个带有 3 条丝带的 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
这完美地工作并且做我想要的。
我的问题是如何概括代码中的功能区数量。如果我想添加一个新功能区,我可以复制/粘贴我的代码,但这不是我想要的...我只想扩展中断向量 (c(0.1, 0.2, 0.3, 0.4)) 然后是绘图应该自动包含 4 个色带(甚至更多)。在我的情况下,后面的情节将由一个函数产生。这个函数应该只包含中断(和数据)作为参数。
我想我可以用围绕 geom_ribbon 的 for 循环来做到这一点,并将结果存储在一个列表中。但我没有成功:-(
有人知道吗?提前非常感谢!
【问题讨论】: