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

在ggplot2中绘制累计值随时间变化对比总潜力值的堆叠图

嗨,我来帮你搞定这个ggplot图的需求!你想要的是用数值展示累计总和,同时在背景呈现总潜力值的可视化效果,其实不用纠结position_stack,用分层绘图或者整理数据后堆叠的方式都能轻松实现,下面给你具体的方案:

实现你的累计值vs总潜力可视化

方案1:分层背景式(最贴合你“背景显示潜力值”的设想)

这种方式先画总潜力值的浅灰色背景柱,再在上面叠加累计值的彩色柱,直观对比已完成的累计量和总潜力空间。

完整代码

library(ggplot2)

# 你的示例数据集
df <- data.frame(
  Date = as.Date(c("2017-01-01","2018-01-01","2019-01-01")),
  Value = c(100,100,100),
  Cumulative.Value = c(100,200,300),
  Potential.Value = c(500,500,500)
)

# 绘图核心代码
ggplot(df, aes(x = Date)) +
  # 第一步:绘制总潜力值的背景柱(浅灰半透明,作为基底)
  geom_col(aes(y = Potential.Value), fill = "#e0e0e0", alpha = 0.7) +
  # 第二步:叠加累计值的柱子(鲜明蓝色,突出已完成部分)
  geom_col(aes(y = Cumulative.Value), fill = "#2196F3") +
  # 优化标签和主题
  labs(
    title = "累计完成值 vs 总潜力值",
    y = "数值",
    x = "日期"
  ) +
  theme_minimal()

代码说明

  • 背景层用浅灰色半透明的柱子展示总潜力,让剩余空间一目了然;
  • 前景层用蓝色柱子展示累计值,和背景形成清晰对比;
  • 如果你的Potential.Value随日期变化,这个代码也完全适用,会自动匹配每行的潜力值。

方案2:堆叠式(清晰区分各组成部分)

如果你想把“累计值”“剩余潜力值”“总潜力值”拆分成堆叠的部分,可以先把数据整理成长格式,再用position_stack实现:

完整代码

library(ggplot2)
library(tidyr)

# 整理数据为长格式
df_long <- df %>%
  select(Date, Cumulative.Value, Potential.Value) %>%
  mutate(Remaining.Value = Potential.Value - Cumulative.Value) %>%
  pivot_longer(cols = -Date, names_to = "Indicator", values_to = "Value")

# 绘制堆叠图
ggplot(df_long, aes(x = Date, y = Value, fill = Indicator)) +
  geom_col(position = "stack") +
  labs(
    title = "累计值与剩余潜力堆叠图",
    y = "数值",
    x = "日期",
    fill = "指标类型"
  ) +
  theme_minimal()

代码说明

  • 先通过pivot_longer把宽格式数据转成长格式,方便ggplot识别堆叠分组;
  • position = "stack"会自动把不同指标的数值按日期堆叠起来,总高度就是潜力值,直观展示各部分占比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:37:46