我想在 R 中显示每个变量的两个功能区,例如(最大 - 最小功能区和置信水平功能区) ,如下例geom_ribbon()
所示ggplot2
。我无法分别为每个色带设置颜色。理想情况下,我可以将调色板映射到分类变量 ( type
) 的每个级别,两条色带将从这些颜色中获取颜色。
## Set up data
set.seed(999)
n <- 100
mn1 <- seq(0.5, 0.9, length.out = n)
mn2 <- seq(0.75, 0.25, length.out = n)
tmp1 <- lapply(seq_len(n), function(x) {
x1 <- rnorm(n, mn1[x], 0.1)
x2 <- rnorm(n, mn2[x], 0.1)
rbind(cbind(min(x1), mean(x1)-sd(x1), mean(x1), mean(x1)+sd(x1), max(x1)),
cbind(min(x2), mean(x2)-sd(x2), mean(x2), mean(x2)+sd(x2), max(x2))
)
})
year <- seq(1900, 1900+n-1, 1)
type <- rep(c("all", "partial"), n)
df1 <- data.frame(rep(year,each = 2), do.call(rbind, tmp1), type)
colnames(df1) <- c("year", "xmin", "xsd_lwr", "xmn", "xsd_upr", "xmax", "type")
head(df1)
rm(tmp1, mn1, mn2, year, type, n)
这是我到目前为止在 ggplot2 中所拥有的:
library(ggplot2)
ggplot(df1, aes(x = year, y = xmn, fill = type, col= type))+
geom_ribbon(aes(ymin=xsd_lwr, ymax = xsd_upr), linetype = 0, alpha = 0.4)+
geom_ribbon(aes(ymin=xmin, ymax = xmax), linetype = 0, alpha = 0.4)+
scale_color_manual(values = c("black", "darkred"))+
scale_fill_manual(values = c("grey10", "grey30"))+
geom_line(aes(linetype= type), size = 1)+
scale_x_continuous(breaks = seq(1900, 2000,10))
更新:我已经接受了答案,因为它确实可以精确控制四种不同的颜色,但是,我想表明@teunbrand 的评论也可以作为透明度,实际上,也可以创建四种颜色,并且有更好的图例. 我已将建议修改为以下内容:
ggplot(df1, aes(x = year, y = xmn,col= type))+
geom_ribbon(aes(ymin=xsd_lwr, ymax = xsd_upr, fill = type), linetype = 0, alpha = 0.5)+
geom_ribbon(aes(ymin=xmin, ymax = xmax, fill = type), linetype = 0, alpha =0.5)+
scale_fill_manual(values = c("tomato", "dodgerblue"))+
scale_color_manual(values = c("black", "darkred"))+
geom_line(aes(linetype= type), size = 1)+
scale_x_continuous(breaks = seq(1900, 2000,10))