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

如何使用R中ggplot2包绘制累积流量图(Cumulative Flow Diagram)

你之前代码输出异常的核心原因是geom_area()中指定了stat = "bin",该参数是用于对x轴变量的出现次数做分箱计数,不会对流量值做累积求和计算,也无法实现堆积折线对应的累积数值堆叠效果。

最佳实现方案

方案1:ggplot2原生实现(灵活性最高,可自定义所有样式)

步骤1:数据预处理

你需要先按实体分组、按年份排序后计算每个实体对应年份的累积流量值,示例代码使用dplyr完成预处理:

# 加载依赖包
library(ggplot2)
library(dplyr)

# 数据预处理:计算累积流量
processed_data <- 原始数据框名 %>%
  # 按实体、年份排序,保证累积计算顺序正确
  arrange(Entity, Year) %>%
  # 按实体分组计算累积值
  group_by(Entity) %>%
  # 将「流量数值列名」替换为你实际数据中存储流量值的列名
  mutate(cumulative_flow = cumsum(流量数值列名)) %>%
  ungroup()

步骤2:绘制堆积面积CFD图

ggplot(processed_data, aes(x = Year, y = cumulative_flow, fill = Entity)) +
  # position = "stack" 实现各实体的累积值堆叠,对应Excel二维堆积折线效果
  geom_area(position = "stack", alpha = 0.85) +
  scale_fill_brewer(palette = "Dark2") +
  # 可根据需求自定义坐标轴、标题等样式
  labs(x = "年份", y = "累积流量", fill = "实体分类") +
  theme_bw()

如果你的原始数据中已经提前存储了每年各实体的累积值,不需要额外计算cumsum,可以直接将y映射为你已有的累积值列,去掉预处理步骤即可。


方案2:专用CFD包实现(代码最简,默认适配CFD业务规范)

可以直接用R生态中专门针对累积流量图开发的cfdr包实现,无需手动计算累积值:

# 安装包(首次使用执行)
install.packages("cfdr")

# 加载包
library(cfdr)

# 直接绘图,替换对应列名即可
cfd_plot(
  df = 原始数据框名,
  date_col = "Year",
  state_col = "Entity",
  value_col = "流量数值列名",
  palette = "Dark2"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:09:00