在ggplot2上为多个变量的折线图增加一个阴影标准差。

问题描述 投票:0回答:1

我有一个数据框架,里面有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()
ggplot2 standard-deviation
1个回答
0
投票

通过将数据框转换为长格式并加入到一个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)

© www.soinside.com 2019 - 2024. All rights reserved.