如何使用geom_bar()在R中创建两个分组列

如何使用geom_bar()在R中创建两个分组列,r,geom-bar,geom-col,R,Geom Bar,Geom Col,必须有一种简单的方法为aware列创建一组分组条形图,为Severy列创建另一组分组条形图,每组中的单个条形图是相应区域的值。最终图像应与附加图像相似。 谢谢 按地区% 按地区划分的组别%>% 总结( #地区平均gdp=Gdperus, #区域平均co2=CO2emi, #地区平均流行人口=人口。2008年, 区域平均感知=平均值(感知), 区域平均严重=平均(严重) ) ggplot(按区域划分)+ 几何坐标(映射=aes(填充=区域,x=区域,y=区域平均值),位置=“道奇”)+ 实验室

必须有一种简单的方法为aware列创建一组分组条形图,为Severy列创建另一组分组条形图,每组中的单个条形图是相应区域的值。最终图像应与附加图像相似。 谢谢

按地区%
按地区划分的组别%>%
总结(
#地区平均gdp=Gdperus,
#区域平均co2=CO2emi,
#地区平均流行人口=人口。2008年,
区域平均感知=平均值(感知),
区域平均严重=平均(严重)
)
ggplot(按区域划分)+
几何坐标(映射=aes(填充=区域,x=区域,y=区域平均值),位置=“道奇”)+
实验室(y=“百分比”)

当然,您可能需要将数据重新格式化为long格式,以便将所需的变量以行格式显示才能打印。下面是使用您共享的数据截图的代码:

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',face='bold'),
        legend.text = element_text(color='black',face='bold'),
        legend.title = element_text(color='black',face='bold'),
        panel.grid = element_blank())+
  xlab('Variable')
库(tidyverse)
#资料
df%pivot_更长(-Region)%%>%
ggplot(aes(x=名称,y=值,组=区域,填充=区域))+
geom_bar(状态=身份,位置=位置减淡(0.9))+
主题_bw()+
主题(axis.text=element_text(color='black',face='bold'),
axis.title=元素\文本(颜色为“黑色”,面为“粗体”),
legend.text=元素\文本(颜色为“黑色”,面为“粗体”),
legend.title=元素\文本(颜色为“黑色”,面为“粗体”),
panel.grid=element\u blank()+
xlab('变量')
输出:


一个选项是旋转到“长”格式,然后使用
geom\u 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")
-输出

数据
按区域请用
dput
显示一个小的可复制示例。可能是
库(dplyr);图书馆(tidyr);df1%>%pivot\u longer(cols=-Region)%>%ggplot(aes(x=区域,y=值,fill=名称))+geom\u col()
上面的代码捕获了我搜索的一个分组条形图,但它仅用于感知数据。我还需要严重数据请尝试使用我的注释中的代码,该代码创建一个堆栈条形图,其中区域为x轴值,并且感知%stacked ontop of Severy%。您需要将其更改为“dodge”。发布解决方案below@EthanLobdell伟大的由于您是stackoverflow镇的新手,请检查以下内容:
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, 
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)), class = "data.frame", row.names = c(NA, 
-6L))