在一个小区中使用多个年平均数不同的条形图

时间:2019-02-10 16:37:45

标签: r ggplot2

我目前有两个数据框。我希望使用ggplot在一个图中从它们两个中获得多个条形图。我想从两个数据帧中并排绘制不同年份(1850-1950,1951-2012,2013-2100)的'NEE'变量的平均值,就像在此绿色条形图可视化(https://ars.els-cdn.com/content/image/1-s2.0-S0048969716303424-fx1_lrg.jpg)中一样。 两个数据帧的标头如下所示(这只是一部分)。1850-1859年的两个数据帧的标头都相同:

head(data1)
        Lon  Lat Year    Veg  Soil  Fire    Est      NEE
1       61.0 25.0 1850 -0.102 0.094 0.000 -0.021 -0.02838
2       61.0 25.0 1851 -0.133 0.090 0.000 -0.014 -0.05731
3       61.0 25.0 1852 -0.128 0.097 0.000  0.000 -0.03118
4       61.0 25.0 1853 -0.053 0.093 0.000 -0.003  0.03738
5       61.0 25.0 1854 -0.042 0.101 0.000 -0.001  0.05827
6       61.0 25.0 1855 -0.071 0.104 0.000 -0.010  0.02305
7       61.0 25.0 1856 -0.111 0.095 0.000 -0.008 -0.02403
8       61.0 25.0 1857 -0.141 0.094 0.000 -0.022 -0.06874
9       61.0 25.0 1858 -0.107 0.092 0.000 -0.007 -0.02249
10      61.0 25.0 1859 -0.066 0.095 0.000 -0.001  0.02818

head(data2)
        Lon  Lat Year    Veg  Soil   Fire    Est      NEE
1       61.0 25.0 1850 -0.102 0.094  0.000 -0.021 -0.02838
2       61.0 25.0 1851 -0.133 0.090  0.000 -0.014 -0.05731
3       61.0 25.0 1852 -0.128 0.097  0.000  0.000 -0.03118
4       61.0 25.0 1853 -0.053 0.093  0.000 -0.003  0.03738
5       61.0 25.0 1854 -0.042 0.101  0.000 -0.001  0.05827
6       61.0 25.0 1855 -0.071 0.104  0.000 -0.010  0.02305
7       61.0 25.0 1856 -0.111 0.095  0.000 -0.008 -0.02403
8       61.0 25.0 1857 -0.141 0.094  0.000 -0.022 -0.06874
9       61.0 25.0 1858 -0.107 0.092  0.000 -0.007 -0.02249
10      61.0 25.0 1859 -0.066 0.095  0.000 -0.001  0.02818

我如何实现绘制条形图,比如说从一个图中的两个数据帧分别绘制了1850-1852年,1854-1856年和1857-1859年。我知道在这种情况下条形图将是相同的,因为两个数据框都是相似的,但是我想知道一个主意,可以将代码编辑为所需的年份。 (请注意,我有39125个带9个变量的obs)

这是我到目前为止所做的(遵循会员在本网站上发布的解决方案)。我成功实现了data1和data2 geom_col。但是我如何将它们合并在一起并绘制1850-1852年,1854-1856年的geom_col ,graph of data1 graph of data2与两个数据帧并排?{p3

data1 %>%
      # case_when lets us define yr_group based on Year:
       mutate(yr_group = case_when(Year <= 1950 ~ "1850-1950",
                          Year <= 2012 ~ "1951-2012",
                          Year <= 2100 ~ "2013-2100",
                          TRUE         ~ "Other range")) %>%
      # For each location and year group, get the mean of all the columns:
  group_by(Lon, Lat, yr_group) %>%
  summarise_all(mean) %>%

  # Plot the mean Total for each yr_group
  ggplot(aes(yr_group, NEE)) + geom_col(position = 
"dodge")+theme_classic()+xlab("Year")+ylab(ln)+labs(subtitle="CCSM4 
RCP2.6")+
geom_hline(yintercept=0, color = "black", size=1)

1 个答案:

答案 0 :(得分:1)

我首选的方法通常是先进行数据汇总,然后将输出发送到ggplot。在这种情况下,您可以使用dplyr元数据包中的tidyverse添加一个变量,该变量与给定年份所属的时间段有关,然后收集整个时间段的统计信息。

例如,仅使用您的示例数据,我们就可以将这些年份任意分组,以找到1850-51、1852-53和1854-55的平均值,然后将其相邻显示:

library(tidyverse)
df %>%
  # case_when lets us define yr_group based on Year:
  mutate(yr_group = case_when(Year <= 1851 ~ "1850-51",
                           Year <= 1853 ~ "1852-53",
                           Year <= 1855 ~ "1854-55",
                           TRUE         ~ "Other range")) %>%
  # For each location and year group, get the mean of all the columns:
  group_by(Lon, Lat, yr_group) %>%
  summarise_all(mean) %>%

  # Plot the mean Total for each yr_group
  ggplot(aes(yr_group, Total)) + geom_col()

enter image description here

如果您有多个位置,则可以使用ggplot构面单独显示这些构面,或者在geom_col(等于geom_bar(stat = "identity"),顺便说一句)内使用躲闪,以显示彼此相邻的不同位置。