【发布时间】:2021-08-13 10:04:57
【问题描述】:
我想用两条线绘制一个图,分别代表观测数据和来自特殊模型的数据。还有另外两条线表示其他模型的可变性的最大值和最小值。目标是将这两条线之间的区域涂成灰色,以便前两条线仍然可见。
这里是重现数据的代码:
# create the data set
Month.vec <- c(1:12)
Model.vec <- c(70.33056, 58.91058, 73.40891, 74.42824, 108.45975, 125.85887, 126.02867, 102.54128, 70.66263, 61.30316, 66.04057, 75.75262)
Obs.vec <- c(62.64178, 52.39356, 63.07376, 52.87248, 70.80587, 81.85081, 88.29134, 77.22920, 67.67458, 64.74425, 63.96322, 69.89868)
Up_lim.vec <- c(83.46967, 71.27700, 86.43001, 77.62739, 108.32674, 112.61118, 125.43512, 93.71193, 80.17298, 75.01851, 79.05700, 85.40042)
Low_lim.vec <- c(76.44381, 65.19571, 74.27778, 59.91012, 82.14684, 84.09151, 77.91529, 66.21702, 60.89712, 67.85613, 72.49409, 79.13741)
df <- as.data.frame(cbind(Month.vec, Obs.vec, Model.vec, Up_lim.vec, Low_lim.vec))
colnames(df) <- c("Month", "Observation", "Model", "Upper Limit", "Lower Limit")
四线的“正常”图很容易完成:
# plot
df %>%
as_tibble() %>%
pivot_longer(-1) %>%
ggplot(aes(Month, value, color = name)) +
scale_color_manual("",values= c("blue", "yellow", "red", "black")) +
scale_x_continuous(breaks = seq(1, 12, by = 1)) +
scale_y_continuous(breaks = seq(0, 140, by = 20)) +
ylab("Precipitation [mm]") +
geom_line() +
theme_bw()
所以想法是黑线和蓝线之间的区域用灰色或类似的颜色着色,这样蓝线和黄线仍然可见。
this 问题的结果应该看起来像这样:
我知道这里有一些类似的问题,其中大多数暗示使用geom_ribbon。
我试过了,但只收到以下错误消息:
Error: Aesthetics must be either length 1 or the same as the data (48): ymax and ymin
有人知道怎么做吗?
【问题讨论】: