如何使用R语言绘制含城市学生支出及人口占比的堆叠条形图
R 堆叠条形图绘制代码调整方案
你原有代码存在几处逻辑错误,调整后可直接实现需求,具体修改如下:
调整后可运行代码
library(tidyverse) ggplot(ed_proj, aes(x = city, y = exp_pupil * percent / 100, fill = group)) + # 堆叠柱形,自动按group生成图例 geom_col() + # 堆叠段中间显示占比标签,需要显示群体名可把label改为group geom_text(aes(label = paste0(percent, "%")), size = 3, position = position_stack(vjust = 0.5)) + labs(x = "城市", y = "学生人均支出", fill = "人口统计群体") + theme_light()
核心调整说明
- 移除了原代码中多余的
group_by+summarize步骤,你提供的原始数据集已经是「每个城市对应5个群体各一行」的长表格式,无需额外聚合,原有聚合操作会丢失绘图需要的group、percent、exp_pupil字段 - 不要重复调用
ggplot()函数,所有全局变量映射统一放在第一个ggplot()的参数中即可 - y轴映射改为
exp_pupil * percent / 100,每个群体对应堆叠段的高度刚好是总人均支出的对应占比,所有段堆叠后总高度就是该城市的学生人均支出总数值 fill直接映射group变量(不要加引号,加引号会被识别为固定字符串),删除show.legend=F参数,即可自动生成群体对应的图例geom_text添加position = position_stack(vjust = 0.5)参数,让标签自动对齐到对应堆叠段的中间位置
内容的提问来源于stack exchange,提问作者user17099810
相关产品推荐
相关产品推荐

