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

使用ggplot绘制100%堆叠面积图:LF与HF数据集占比可视化需求

需求:绘制LF与HF各变量的100%堆叠面积图

我手上有两个数据框LF和HF,数据示例如下:

head(LF)
#   Year    SS   SS_CQT  SRP SRP_CQT  TDP TDP_CQT    TP  TP_CQT
# 1 2009 386.18 1164.3966 4586 12.30089 5285 14.23955 6707 18.17906
# 2 2010 268.72  884.9963 4354 13.37728 4927 15.20045 6078 18.81523
# 3 2011 347.61  746.7686 6924 12.25466 7917 13.84788 9302 16.93291
# 4 2012 170.68 1218.6758 2471 16.39350 3006 19.60066 3670 24.18561

head(HF)
#   Year    SS    SS_CQT  SRP SRP_CQT  TDP TDP_CQT    TP   TP_CQT
# 1 2009 184.44  4055.367  535 11.53037  621 13.50632 1175  25.82282
# 2 2010 118.08  2726.272  737 14.44196  868 16.92781 1236  24.56522
# 3 2011 119.90  2208.308  663 10.19803  742 11.42253 1086  17.36818
# 4 2012 554.07 11913.003 2413 45.44719 2781 52.90863 4290  85.87746
# 5 2013 165.32  5926.628  424 15.93962  461 17.16547  873  31.70556

已知LF$SS + HF$SS = 总负荷(total load),我需要用ggplot2绘制各列变量(SS、SS_CQT、SRP、SRP_CQT等)中LF与HF的占比百分比100%堆叠面积图,效果参考分层展示不同来源在各年份占比变化的100%堆叠面积图。


解决方案步骤

1. 数据预处理:整理成ggplot适配的长格式

首先要把两个宽格式数据框合并,计算每个变量的总负荷,再算出LF和HF的占比,最后转成长格式方便绘图:

library(tidyverse)

# 给两个数据框添加来源标识
LF <- LF %>% mutate(source = "LF")
HF <- HF %>% mutate(source = "HF")

# 合并两个数据框
combined_df <- bind_rows(LF, HF)

# 转成长格式,按年份和变量分组计算占比
long_df <- combined_df %>%
  pivot_longer(cols = -c(Year, source), names_to = "variable", values_to = "value") %>%
  group_by(Year, variable) %>%
  mutate(total = sum(value),
         percentage = (value / total) * 100) %>%
  ungroup()

2. 绘制100%堆叠面积图

使用geom_area()配合position = "fill"实现100%堆叠效果,同时分面展示不同变量会更清晰:

ggplot(long_df, aes(x = Year, y = percentage, fill = source)) +
  geom_area(position = "fill", alpha = 0.7) +
  # 分面展示每个变量,每行2个图
  facet_wrap(~variable, ncol = 2) +
  # 设置标签和主题样式
  labs(title = "LF与HF各变量占比100%堆叠面积图",
       x = "年份",
       y = "占比(%)",
       fill = "来源") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
        axis.text = element_text(size = 10),
        legend.position = "bottom")

如果希望所有变量在同一个图中展示(多系列堆叠),可以调整分组逻辑,但分面展示能更直观地对比每个变量的占比变化趋势。


内容的提问来源于stack exchange,提问作者Vasker Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:32