我想用两条线表示观察数据和来自特殊模型的数据。还有另外两条线代表其他模型的变异性的最大值和最小值。目标是将这两条线之间的区域涂成灰色,以便前两条线仍然可见。
这是重现数据的代码:
# 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()
所以这个想法是黑色和蓝色线之间的区域用灰色或类似的颜色阴影,这样蓝色和黄色的线仍然可见。
从这个问题来看,结果应该有点像这样:
我知道这里有一些类似的问题,其中大多数暗示使用geom_ribbon
. 我试过这个,但只收到以下错误消息:
Error: Aesthetics must be either length 1 or the same as the data (48): ymax and ymin
有人知道如何做到这一点吗?
我认为将数据保存为更广泛的格式然后用于geom_ribbon
创建阴影区域会更容易:
df %>%
as_tibble() %>%
ggplot +
geom_line(aes(Month, Model, color = 'Model')) +
geom_line(aes(Month, Observation, color = 'Observation')) +
geom_ribbon(aes(Month, ymax=`Upper Limit`, ymin=`Lower Limit`), fill="grey", alpha=0.25) +
scale_x_continuous(breaks = seq(1, 12, by = 1)) +
scale_y_continuous(breaks = seq(0, 140, by = 20)) +
scale_color_manual(values = c('Model' = 'yellow','Observation' = 'red')) +
ylab("Precipitation [mm]") +
theme_bw() +
theme(legend.title = element_blank())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句