我有一个数据框架,里面有5个不同模型的多个集合的平均数,所以5列加上一个日期列,还有第二个数据框架,在那里我有标准差.我想在一个图中绘制所有的数据,其中我有不同模型的平均数和每个平均数的阴影标准差。我想在一张图中绘制所有的数据,其中我有不同模型的平均值和阴影标准差。
一个样本数据。
Means:
M1 M2 M3 M4 M5 date
1 0.1468030 0.09307112 0.1310087 0.1328935 0.1312402 2015-01-01
2 0.1477525 0.09162262 0.1255959 0.1330630 0.1296496 2016-01-01
3 0.1465378 0.09091183 0.1271953 0.1302629 0.1288667 2017-01-01
4 0.1430386 0.09075522 0.1270623 0.1291629 0.1304318 2018-01-01
5 0.1431500 0.09127082 0.1242448 0.1255703 0.1291016 2019-01-01
6 0.1407827 0.08992585 0.1249174 0.1244377 0.1290919 2020-01-01
7 0.1394645 0.08821484 0.1247585 0.1235587 0.1286337 2021-01-01
8 0.1389529 0.08810128 0.1224901 0.1236105 0.1284389 2022-01-01
9 0.1400275 0.08770718 0.1228224 0.1206313 0.1270611 2023-01-01
10 0.1375498 0.08705453 0.1207565 0.1192216 0.1289673 2024-01-01
SD:
M1 M2 M3 M4 M5 date
1 NaN 0.002352747 0.003872364 0.002779382 0.003038877 2015-01-01
2 NaN 0.002636449 0.003809441 0.003130044 0.004208446 2016-01-01
3 NaN 0.002584647 0.003494403 0.003052774 0.005034087 2017-01-01
4 NaN 0.002942681 0.004341524 0.002544359 0.003276497 2018-01-01
5 NaN 0.003041309 0.003729560 0.002825900 0.004041488 2019-01-01
6 NaN 0.002798490 0.003825870 0.002732643 0.004525613 2020-01-01
7 NaN 0.002823620 0.003940110 0.001902435 0.003653864 2021-01-01
8 NaN 0.002546572 0.004287470 0.001727357 0.003772990 2022-01-01
9 NaN 0.002362555 0.003050700 0.002808552 0.003307351 2023-01-01
10 NaN 0.003004829 0.003493746 0.001431315 0.003207370 2024-01-01
df2 <- melt(Means, id = "date")
tit <- sprintf("%s %s Anuual Burden - %s", regnm, spcname, scenm)
filename <- sprintf("%s/TS_%s_%s_BurdenANN_%s.png",folderout, regnm, spcname, scenm)
png(filename,width = 8 * 360, height = 5 * 360, res = 360)
print(ggplot(data = df2, aes(x = date, y = value, color = variable)) +
geom_line(data=subset(df2, variable=="M1"), size=2) +
geom_line(data=subset(df2, variable=="M2"), size=2) +
geom_line(data=subset(df2, variable=="M3"), size=2) +
geom_line(data=subset(df2, variable=="M4"), size=2) +
geom_line(data=subset(df2, variable=="M5"), size=2) +
scale_colour_manual(name = spcname, breaks = c("M1","M2","M3","M4","M5"), values = clr2) +
xlab("Years") + ylab(sprintf("%s (Tg)", spcname)) + ggtitle(tit) + theme_bw() + theme(legend.key = element_blank()) +
guides(color = guide_legend(override.aes = list(linetype = c(1,1,1,1,1), shape = c(NA,NA,NA,NA,NA)))) + theme(plot.margin=unit(c(1,3,1,1),"cm"))+
theme(legend.position=c(1.1,.6), legend.direction = "vertical") +
theme(legend.title = element_blank())) # + expand_limits(y=0)
dev.off()
通过将数据框转换为长格式并加入到一个df中,这可以通过以下方式实现 geom_line
和a geom_ribbon
像这样。
library(ggplot2)
library(dplyr)
library(tidyr)
means_long <- pivot_longer(Means, -date, values_to = "mean", names_to = "variable")
sd_long <- pivot_longer(SD, -date, values_to = "sd", names_to = "variable")
df_join <- means_long %>%
left_join(sd_long)
#> Joining, by = c("date", "variable")
ggplot(data = df_join, aes(x = date, group = variable)) +
geom_line(aes(y = mean, color = variable), size = 1) +
geom_ribbon(aes(y = mean, ymin = mean - sd, ymax = mean + sd, fill = variable), alpha = .2) +
xlab("Years") +
theme_bw() +
theme(legend.key = element_blank()) +
theme(plot.margin=unit(c(1,3,1,1),"cm"))+
theme(legend.position = c(1.1,.6), legend.direction = "vertical") +
theme(legend.title = element_blank())
#> Warning in max(ids, na.rm = TRUE): kein nicht-fehlendes Argument für max; gebe -
#> Inf zurück
创建于2020-05-20 重读包 (v0.3.0)