我目前有两个数据框。我希望使用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)
答案 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()
如果您有多个位置,则可以使用ggplot构面单独显示这些构面,或者在geom_col(等于geom_bar(stat = "identity")
,顺便说一句)内使用躲闪,以显示彼此相邻的不同位置。