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

ggplot绘制堆叠面积图如何反转区域位置实现100%全幅填充

问题说明

需要实现参考效果的100%堆叠面积图:
参考堆叠面积图效果
初始实现代码如下:

ggplot(eth_txs2, aes(x=date))+
  geom_area(aes(y=eth_percent, group = 1), color = "blue", fill = "blue")+
  geom_area(aes(y=opt_percent, group = 1), color = "red", fill = "red")+
  geom_area(aes(y=arb_percent, group = 1), color = "lightblue", fill = "lightblue")

使用数据集结构参考:
数据集样例
初始代码运行输出的图表存在灰色空白,无法占满100%绘图区域:
实际运行错误效果
需要调整参数、反转区域绘制顺序,消除空白,输出和参考一致的效果。

故障原因

当前写法是独立叠加三个互不关联的面积图层,不符合ggplot堆叠面积图的语法逻辑:

  • 每个geom_area图层默认从y=0位置开始填充,三层互相覆盖,不会自动做累加堆叠偏移
  • 未将分类维度映射给填充属性,ggplot无法识别分组关系,不会自动计算每层的堆叠起始高度
  • 绘制顺序未做适配,最终就会出现未被填充的空白区域。
修复方案

按以下两步调整即可:

  1. 将宽格式数据集转换为长格式,把三个百分比字段收拢为「链分类」+「占比值」两个字段,通过position = "stack"参数让ggplot自动计算堆叠位置
  2. 通过调整因子水平反转堆叠顺序,同时关闭y轴默认边距,让图形完全占满绘图区域。

修复后可直接运行的代码:

library(tidyverse)

# 宽表转长表,适配ggplot分组绘图语法
eth_txs_long <- eth_txs2 %>%
  pivot_longer(
    cols = c(eth_percent, opt_percent, arb_percent),
    names_to = "chain",
    values_to = "percent"
  ) %>%
  # 反转因子水平,调整堆叠顺序匹配参考图效果
  mutate(chain = fct_rev(chain))

# 绘制标准100%堆叠面积图
ggplot(eth_txs_long, aes(x = date, y = percent, fill = chain)) +
  geom_area(position = "stack", linewidth = 0.2) +
  # 手动指定填充色,和初始代码的颜色设置保持一致
  scale_fill_manual(
    values = c(
      "eth_percent" = "blue",
      "opt_percent" = "red",
      "arb_percent" = "lightblue"
    )
  ) +
  # 移除y轴默认扩展边距,让图形上下完全贴合绘图区边界
  scale_y_continuous(expand = c(0, 0))

前置校验:同一日期下三个占比值的和需要等于1(即100%),如果原始数据加总不为1,需要先做归一化处理,否则无法实现完全填满的100%堆叠效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:21:32