如何通过R语言ggplot绘制带量化数值的堆叠geom_col柱状图
实现方案
问题核心原因
你当前的代码直接对多列指标求和后映射给y和fill,无法拆分每个指标的独立堆叠块,也没法针对单个分类加标签,核心是没有将宽格式的统计数据转换为ggplot堆叠图要求的长格式。
操作步骤
- 第一步:将宽表转换为长表,把PTS、MP等统计指标转为分类列,对应数值转为值列
- 第二步:调整ggplot映射规则,将统计分类映射给fill,数值映射给y
- 第三步:用
geom_text搭配堆叠位置参数给每个块添加标签
完整可运行代码
# 加载所需包 library(tidyverse) # 1. 数据预处理:宽表转长表 long_stats <- basicStats %>% select(Age, PTS, MP, TRB, AST, STL, BLK, TOV) %>% # 保留需要用到的列 pivot_longer( cols = -Age, # 除Age外的所有指标列都转为长格式 names_to = "stat_type", # 存储指标名称的列命名为stat_type values_to = "stat_value" # 存储指标数值的列命名为stat_value ) # 2. 绘制带标签的堆叠柱形图 basic <- ggplot(data = long_stats, aes(x = Age, y = stat_value, fill = stat_type)) + geom_col(position = "stack") + # position=stack为堆叠默认配置,明确标注可读性更强 # 给每个堆叠块添加居中标签,vjust=0.5控制标签在块内垂直居中 geom_text(aes(label = stat_value), position = position_stack(vjust = 0.5), size = 3) + coord_flip() # 输出绘图结果 print(basic)
自定义调整说明
- 如果想要标签显示指标名称而非数值,把
geom_text里的label = stat_value改成label = stat_type即可 - 如果需要调整标签的字体、颜色,可以直接在
geom_text参数中添加color、family等配置项 - 可以通过
scale_fill_manual自定义每个统计指标对应的填充色
内容的提问来源于stack exchange,提问作者CodeMonke
相关产品推荐
相关产品推荐

