如何在R中按日期绘制分组堆叠百分比柱状图?
解决R中堆叠柱状图百分比无法100%堆叠的问题
问题核心是未按「日期+贷款类别」的组合分组计算票面利率的占比,导致堆叠后数值总和未达到100%。以下是具体修正方案:
1. 数据预处理:计算组内占比
用dplyr按日期(Dato)和贷款类别(Lånestørrelse)分组,计算每个KuponRente在组内的百分比:
library(dplyr) library(ggplot2) # 假设原始数据框为bond_data processed_data <- bond_data %>% group_by(Dato, Lånestørrelse) %>% mutate(total = sum(Antall, na.rm = TRUE), percentage = (Antall / total) * 100) %>% ungroup()
注:若数据已有百分比字段但未按组归一化,替换Antall为对应字段后重新按组计算总和并调整至100%即可。
2. 绘制100%堆叠柱状图
提供两种实现方式,按需选择:
方式一:基于预处理的百分比
ggplot(processed_data, aes(x = Dato, y = percentage, fill = KuponRente)) + geom_col(position = "stack") + facet_wrap(~Lånestørrelse) + labs(title = "不同贷款主体票面利率占比变化", x = "日期", y = "占比(%)", fill = "票面利率") + theme_bw()
方式二:自动缩放至100%(无需手动计算百分比)
若原始数据是计数类字段(如Antall),可直接用position_fill()让ggplot自动完成归一化:
ggplot(bond_data, aes(x = Dato, y = Antall, fill = KuponRente)) + geom_col(position = position_fill()) + facet_wrap(~Lånestørrelse) + labs(title = "不同贷款主体票面利率占比变化", x = "日期", y = "占比(%)", fill = "票面利率") + scale_y_continuous(labels = scales::percent_format()) + theme_bw()
关键说明
- 必须按「日期+贷款类别」分组,否则会出现跨组计算占比的错误。
- 使用
position_fill()时,y轴默认是0-1的比例,需通过scale_y_continuous转换为百分比格式显示。
内容的提问来源于stack exchange,提问作者Nuller
相关产品推荐
相关产品推荐

