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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:32:01