如何拆分geom_col中的堆叠条形并重新排序分箱?
按企业规模&年份展示就业情况的独立条形图解决方案
需求:制作不同年份按企业规模划分的就业占比条形图,要求各年份的条形相互独立并排,而非堆叠。当前用fill区分年份时,企业规模的分箱顺序混乱,且条形是堆叠状态,不符合需求。
当前使用代码
firm_size %>% ggplot(aes(`firm size`, total, fill = year)) + geom_col() + theme_minimal() + labs(title = "Firm Size Distribution", subtitle = "2021", x = "Number of Employees at Firm", y = "% of Total Santa Barbara Employment")
数据结构说明
数据包含三列:
year:年份(如2021、2022)firm size:企业规模分箱(字符型,如"1-4"、"5-9"、"10-19"等)total:对应类别下的就业占比
当前输出问题
- 企业规模分箱顺序混乱(字符默认排序导致顺序不符合业务逻辑)
- 不同年份的条形堆叠在一起,未实现独立并排展示
修正后的代码及说明
# 调整企业规模分箱的顺序,转为有序因子 firm_size$`firm size` <- factor(firm_size$`firm size`, levels = c("1-4", "5-9", "10-19", "20-49", "50-99", "100-249", "250+"), ordered = TRUE) # 绘制独立并排的条形图 firm_size %>% ggplot(aes(`firm size`, total, fill = factor(year))) + geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 设置dodge让条形并排,调整宽度提升美观度 theme_minimal() + labs(title = "企业规模就业分布", subtitle = "2021-2022", # 改为对应年份范围 x = "企业员工数量", y = "圣巴巴拉总就业占比(%)", fill = "年份") + # 给图例添加明确标题 theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 可选:旋转x轴标签避免文字重叠
关键修正点
- 修正分箱顺序:将
firm size转为因子并指定自定义levels,强制按实际业务逻辑排序 - 实现独立条形:在
geom_col中添加position = position_dodge(),让不同年份的条形并排展示 - 优化细节:更新标题、副标题为中文适配,可选旋转x轴标签避免文字重叠
内容的提问来源于stack exchange,提问作者Carly
相关产品推荐
相关产品推荐

