繁体   English   中英

按多个因素对 geom_bar 频率图进行排序

[英]Ordering geom_bar plots of frequency by multiple factors

我正在创建一个条形图来显示每个县的调查回复数量,我想按县和地区对回复进行分组。 我的数据如下所示:

head(df)
# A tibble: 6 x 4
  responseid region     county      industry             
       <dbl> <fct>      <fct>       <chr>                
1        137 West Coast Los Angeles Construction         
2        138 West Coast San Diego   Energy               
3        139 West Coast Orange      Professional Services
4        140 East Coast Queens      Restaurants          
5        144 West Coast San Diego   Energy               
6        145 East Coast Miami-Dade  Public Sector    

我正在运行此代码:

ggplot(df, mapping = aes(x = fct_rev(fct_infreq(county)), y = stat(count))) +
  geom_bar(aes(fill = region)) + 
  coord_flip()+
  scale_y_continuous() +
  ggtitle("Responses by County") +
  ylab("Number of Responses")+
  xlab("County") + 
  labs(fill = "Region") +
  geom_text(stat='count', aes(label=..count..), vjust = .5, hjust = -1)

生成这个图: 各县响应图,按地区着色

该图按响应频率按县排序。 我想先按地区排序,然后按响应计数排序。 我想要这个相同的图表,但所有西海岸县按响应从最多到最少的顺序排列,然后东海岸县按响应从最多到最少的顺序排列。

对它进行分面不会产生我想要的效果,因为它将西海岸响应拉到单独的网格中,并且您不能再通过相同的 y 轴比较所有县; 没有轴翻转的刻面会使县名重叠并变得难以辨认。

我还尝试添加这样的交互参数,但这根本没有改变情节:

ggplot(df, mapping = aes(x = fct_rev(fct_infreq(county)), y = stat(count), group = interaction(region, county))) +
  geom_bar(aes(fill = region)) + 
  coord_flip()+
  scale_y_continuous() +
  ggtitle("Responses by County") +
  ylab("Number of Responses")+
  xlab("County") + 
  labs(fill = "Region") +
  geom_text(stat='count', aes(label=..count..), vjust = .5, hjust = -1)

编辑:这就是使用 facet wrap 时的样子。 我不是粉丝,因为当条形不是从相同的 y 轴开始时,很难直观地比较它们: 在此处输入图片说明

如果您删除 coord_flip,所有条形都从同一个位置开始,但是您根本无法读取县名。 在此处输入图片说明

我在原始图中添加了以下两行以获得我想要的结果。 感谢所有帮助过的人!

facet_grid(region ~ ., scales = "free_y", space = "free") +
  theme(strip.background = element_blank(), strip.text = element_blank())

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM