基于指定分组值对ggplot2堆叠条形图进行降序重排
实现方法
ggplot的离散坐标轴显示顺序由对应列的因子水平顺序决定,要实现按value为"Einen großen Beitrag"时的n值对条形整体降序排列,只需要在绘图前重排name列的因子水平即可,不需要修改原有绘图的核心参数。
完整代码
library(tidyverse) # 数据预处理:重排name的因子顺序 F14a <- F14a %>% ungroup() %>% # 先清除数据集自带的分组属性,避免计算异常 group_by(name) %>% # 提取每个条形对应"Einen großen Beitrag"的n值作为排序依据,缺失值填0 mutate(sort_ref = replace_na(n[value == "Einen großen Beitrag"], 0)) %>% ungroup() %>% # 按参考值降序设置name的因子水平 mutate(name = fct_reorder(name, sort_ref, .desc = TRUE)) # 原有绘图代码完全不需要改动,直接运行即可 ggplot(F14a, aes(x = name, y = n, fill = value))+ geom_col()+ scale_color_viridis_d(aesthetics = "fill", alpha = 0.8)+ coord_flip()+ theme_bw()+ theme(legend.position = "bottom", legend.title = element_text(size=7), legend.text=element_text(size=7), axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank() )
注意事项
- 上述代码不会改动你已经调整好的条形内部堆叠顺序,仅调整不同条形之间的整体排序。
- 如果存在某个条形完全没有"Einen großen Beitrag"类别的情况,代码会自动将这类条形排在最后,如果需要调整这类条形的位置,修改
replace_na里的填充值即可。 - 如果后续需要更换排序依据的类别,只需要修改
value == "Einen großen Beitrag"中的类别文本即可。
内容的提问来源于stack exchange,提问作者KC15
相关产品推荐
相关产品推荐

