r-并排ggplot条形图,带有共享图例和不同的x轴变量



2012-2020年佛蒙特州农业部门基于年份和县的灾害报告统计。我想用一个共同的传说来描绘这两个按县和按年的情节。请注意,x轴不同,并且两个图例的共享变量的颜色不匹配。

虽然"按年份"one_answers"按县"在其原始数据集中共享相同数量的变量,但因为我想对任何给定年份或县至少出现3次或更多次的变量进行子集设置,"按县(by County("只剩下3个变量,而"按年(by Year("则有相同的3个变量加上额外的3个。

我在堆栈中搜索了一个答案,但没有唯一的解决方案,任何关于如何实现所需输出的想法都值得赞赏。

数据如下:

df1<-structure(list(County = c("Addison", "Addison", "Addison", "Bennington", 
"Bennington", "Bennington", "Caledonia", "Caledonia", "Caledonia", 
"Chittenden", "Chittenden", "Chittenden", "Essex", "Essex", "Essex", 
"Franklin", "Franklin", "Franklin", "Grand Isle", "Grand Isle", 
"Grand Isle", "Lamoille", "Lamoille", "Lamoille", "Orange", "Orange", 
"Orange", "Orleans", "Orleans", "Orleans", "Rutland", "Rutland", 
"Rutland", "Washington", "Washington", "Washington", "Windham", 
"Windham", "Windham", "Windsor", "Windsor", "Windsor"), Type = c("Drought", 
"Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain", 
"Drought", "Frost & Cold BelownNormal Temperatures", "Flooding &nExcessive Rain"
), Count = c(4L, 3L, 7L, 7L, 4L, 7L, 5L, 6L, 4L, 2L, 1L, 7L, 
5L, 6L, 4L, 1L, 1L, 3L, 2L, 1L, 7L, 1L, 1L, 3L, 5L, 6L, 4L, 1L, 
1L, 3L, 3L, 3L, 6L, 1L, 1L, 3L, 5L, 6L, 5L, 6L, 6L, 5L), layer = c("By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County", "By County", "By County", "By County", "By County", 
"By County"), Year = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
)), row.names = c(NA, -42L), class = c("tbl_df", "tbl", "data.frame"
))
df2<-structure(list(Year = c("2012", "2012", "2012", "2012", "2012", 
"2012", "2013", "2013", "2013", "2013", "2013", "2013", "2014", 
"2014", "2014", "2014", "2014", "2014", "2015", "2015", "2015", 
"2015", "2015", "2015", "2016", "2016", "2016", "2016", "2016", 
"2016", "2017", "2017", "2017", "2017", "2017", "2017", "2018", 
"2018", "2018", "2018", "2018", "2018", "2019", "2019", "2019", 
"2019", "2019", "2019", "2020", "2020", "2020", "2020", "2020", 
"2020"), Type = c("Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain", "Heat, Excessive Heat,nHigh Temp, Low Humidty", 
"Wind, High Winds", "Hail", "Drought", "Frost & Cold BelownNormal Temperatures", 
"Flooding &nExcessive Rain"), Count = c(1L, 0L, 0L, 3L, 3L, 
0L, 0L, 5L, 5L, 0L, 0L, 38L, 0L, 0L, 0L, 0L, 10L, 0L, 0L, 3L, 
3L, 8L, 0L, 3L, 8L, 3L, 0L, 9L, 10L, 0L, 0L, 0L, 0L, 0L, 4L, 
4L, 0L, 0L, 0L, 4L, 0L, 4L, 0L, 0L, 0L, 0L, 19L, 19L, 0L, 0L, 
0L, 24L, 0L, 0L), layer = c("By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year", "By Year", "By Year", "By Year", 
"By Year", "By Year", "By Year"), County = c(NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA)), row.names = c(NA, -54L), class = c("tbl_df", "tbl", 
"data.frame"))

这是代码:

# library(ggplot2)
# library(RColorBrewer)
# library(sjPlot)
# library(tidyr)
# library(viridis)
set_theme(
geom.outline.color = "antiquewhite4", 
geom.outline.size = .5, 
geom.label.size = 1.5,
geom.label.color = "black",
title.color = "black", 
title.size = 1.5, 
title.align = 'center',
# axis.angle.x = 90, 
axis.textcolor = "black", 
axis.textsize = 1.15,
base = theme_bw(),
)
p1<-ggplot(df1)+
geom_bar(aes(x=County, y=Count, fill=Type), stat="identity") +
# scale_fill_brewer(palette="PuRd") +
scale_fill_viridis(discrete = TRUE) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), legend.key.height=unit(.75, "cm"))
p1
p2<-ggplot(df2)+
geom_bar(aes(x=Year, y=Count, fill=Type), stat="identity") +
# scale_fill_brewer(palette="PuRd") +
scale_fill_viridis(discrete = TRUE) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), legend.key.height=unit(.75, "cm"))
p2

我在你的代码中尝试了gridExtra,它似乎达到了的效果

library(gridExtra)
p3 <- grid.arrange(arrangeGrob(p1 + theme(legend.position="none"),
p2 + theme(legend.position="right"),
nrow=1),nrow=2,heights=c(10, 1))

之后我看到的问题是更改图例标题,也许删除/隐藏其中一个y轴标签(编辑:现在我可以看到轴不一样(

最新更新