问题描述
必须有一种简单的方法来创建一组用于感知列的分组条形图,以及用于创建严重列的另一组分组条形图,其中每个组中的各个条形图是各个区域的值。最终图像应与附件图像相似。 谢谢!
Image I'm seeking approximately
by_region <- country_obs_df %>%
group_by(Region) %>%
summarize(
#region_avg_gdp = GDPperUS,#region_avg_co2 = CO2emi,#region_avg_pop = Population.2008,region_avg_aware = mean(Aware),region_avg_serIoUs = mean(SerIoUs)
)
ggplot(by_region) +
geom_col(mapping = aes(fill = Region,x = Region,y=region_avg_aware),position = "dodge") +
labs(y = "Percent")
解决方法
可以肯定的是,您可能必须将数据重新格式化为长格式,以便以行格式具有必需的变量才能进行绘制。这里的代码使用您共享的数据截图:
library(tidyverse)
#Data
df <- data.frame(Region=c('Africa','Asia','Europe','Europe (North America)','Europe (Oceania)','Latin America & Caribbean'),region_avg_aware=c(39.9,60.9,88.3,96.6,97.3,63.8),region_avg_serious=c(82.3,76.3,67.7,71.1,78.2,93.8))
#Plot
df %>% pivot_longer(-Region) %>%
ggplot(aes(x=name,y=value,group=Region,fill=Region))+
geom_bar(stat = 'identity',position = position_dodge(0.9))+
theme_bw()+
theme(axis.text = element_text(color='black',face='bold'),axis.title = element_text(color='black',legend.text = element_text(color='black',legend.title = element_text(color='black',panel.grid = element_blank())+
xlab('Variable')
输出:
,一种选择是将其设置为“长”格式,然后使用geom_col
library(dplyr)
library(ggplot2)
library(tidyr)
by_region %>%
pivot_longer(cols = -Region,names_to = 'region_avg') %>%
ggplot(aes(x = region_avg,y = value,fill = Region)) +
geom_col( position = "dodge") +
labs(y = "Percent")
-输出
数据
by_region <- structure(list(Region = c("Africa","Asia","Europe","Europe (North America)","Europe (Oceania)","Latin America & Caribbean"),region_avg_aware = c(39.9,region_avg_serious = c(82.3,93.8)),class = "data.frame",row.names = c(NA,-6L))