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

如何用R的ggplot绘制多变量累积百分比变化时间序列对比图

问题需求
  • 在年份维度下对比kl(资本劳动比)与rtfpna(全要素生产率)、kl与ly(劳动生产率)的关系
  • 图表Y轴设置为累积百分比变化,参考指定双变量对比样式
  • 现有代码仅能展示原始变量水平值,无法实现目标效果
  • 数据集包含year、rtfpna、kl、ly四个变量,为1950-2019年时间序列数据
解决方案

步骤1:数据预处理(计算累积百分比变化)

首先将原始变量转换为以1950年为基准的累积百分比变化,公式为:((当前年份值 / 1950年基准值) - 1) * 100,以此直观展示各变量随时间的相对变化幅度。

步骤2:修正后的完整代码

# 加载所需包
library(dplyr)
library(reshape2)
library(ggplot2)

# 计算各变量的累积百分比变化(以1950年为基准)
brazil_cum <- brazil %>%
  mutate(
    rtfpna_cum = ((rtfpna / rtfpna[year == 1950]) - 1) * 100,
    ly_cum = ((ly / ly[year == 1950]) - 1) * 100,
    kl_cum = ((kl / kl[year == 1950]) - 1) * 100
  ) %>%
  select(year, rtfpna_cum, ly_cum, kl_cum) %>%
  # 转换为长格式适配ggplot
  melt(id.vars = "year", 
       variable.name = "indicator", 
       value.name = "cumulative_pct")

# 绘制对比图表(双Y轴区分资本劳动比与其他变量)
ggplot(brazil_cum, aes(x = year)) +
  # 绘制全要素生产率、劳动生产率曲线
  geom_line(aes(y = cumulative_pct, color = indicator), linewidth = 1) +
  # 单独绘制资本劳动比曲线(深色突出)
  geom_line(data = subset(brazil_cum, indicator == "kl_cum"),
            aes(y = cumulative_pct), 
            color = "#2c3e50", 
            linewidth = 1.2) +
  # 设置坐标轴标签
  xlab("年份") +
  ylab("全要素生产率/劳动生产率 累积百分比变化(%)") +
  # 配置右Y轴(对应资本劳动比)
  scale_y_continuous(
    sec.axis = sec_axis(~ ., name = "资本劳动比 累积百分比变化(%)")
  ) +
  # 自定义颜色与图例标签
  scale_color_manual(
    values = c("rtfpna_cum" = "#3498db", "ly_cum" = "#e74c3c"),
    labels = c("全要素生产率(rtfpna)", "劳动生产率(ly)")
  ) +
  # 优化主题样式
  theme_minimal() +
  theme(
    legend.title = element_blank(),
    axis.title.y.right = element_text(color = "#2c3e50"),
    legend.position = "top"
  )

代码说明

  • 累积变化计算:直接通过mutate基于1950年基准值计算,操作简洁高效
  • 长格式转换:用melt将宽格式数据转为长格式,方便ggplot按变量区分颜色
  • 双Y轴设置:通过sec_axis添加右Y轴,匹配参考图表的双变量对比逻辑
  • 样式优化:用颜色、线宽区分变量,提升图表可读性与美观度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:15:41