我认为这与“在R中创建多列数据的分组条形图”不同,因为我的努力在于我想显示每个国家/地区的人口比例。
我有一个包含六列和500个观察值的数据框。第一列是ID,表示每个受访者的问卷调查,询问他们喜欢什么水果。第二列是国家/地区,显示受访者来自哪个国家/地区。第3至第6列均为虚拟变量(第3列为苹果,第4列为香蕉,第5列为橙色,第6列为菠萝蜜),如果此人喜欢该水果,则== 1; == 0,如果他/她不喜欢它。
我的目标:我想制作一个条形图,其中x =水果类型,填充=国家,y =每个国家中喜欢这种水果的人口百分比。通过这样做,我想比较不同国家支持不同水果的人口百分比。
我正在尝试使用ggplot,但失败了。有人可以帮我吗?谢谢!!!
数据:
structure(list(id = 1:31, Country = c("USA", "USA", "USA", "USA",
"USA", "USA", "USA", "USA", "Germany", "Germany", "Germany",
"Germany", "Germany", "Germany", "UK", "UK", "UK", "UK", "UK",
"UK", "UK", "UK", "UK", "UK", "France", "France", "France", "France",
"France", "France", "France"), Apple = c(1L, 1L, 1L, 0L, 0L,
1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L,
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Banana = c(1L, 1L, 0L,
1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L,
0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L), Orange = c(0L,
0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L), Jackfruit = c(0L,
0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L)), row.names = c(NA,
-31L), class = c("tbl_df", "tbl", "data.frame"))
代码:好的,我只是对如何执行此操作没有任何想法。不是我尝试但失败了。这是一个非常错误的错误(实际上显示了来自不同国家/地区喜欢苹果的人的百分比:
ggplot(df, aes(x=apple, y=..count..,fill=country))+
geom_bar(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..]), position="dodge" )