You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:39:01