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

如何用ggplot绘制各国政府债务/GDP比率趋势折线图?

使用ggplot绘制各国债务/GDP比率趋势多折线图的实现方法

一、必须先做数据处理(宽表转长表)

你的数据集是宽格式(年份列 + 多个国家列),而ggplot2对长格式数据的支持更好,所以第一步必须把数据转成长格式——也就是三列结构:年份、国家名称、债务/GDP比率。

用tidyverse工具包的pivot_longer()就能快速完成转换,假设你的数据框名叫debt_data,代码示例如下:

# 先安装加载tidyverse(如果没装过的话)
install.packages("tidyverse")
library(tidyverse)

# 宽格式转长格式
long_debt_data <- debt_data %>%
  pivot_longer(
    cols = -central_government_debt_percent_of_gdp,  # 排除年份列,选中所有国家列
    names_to = "country",  # 原国家列的列名存入新列country
    values_to = "debt_ratio"  # 原国家列的数值存入新列debt_ratio
  )

二、绘制多折线图(无需单独添加geom_line)

转成长格式后,只需要一次调用geom_line(),通过color参数映射国家名称,就能自动生成各国的折线,完全不用逐个国家手动添加:

ggplot(long_debt_data, aes(x = central_government_debt_percent_of_gdp, y = debt_ratio)) +
  geom_line(aes(color = country)) +  # 用颜色区分不同国家的折线
  labs(
    x = "年份",
    y = "中央政府债务/GDP比率(%)",
    title = "各国中央政府债务/GDP比率变化趋势",
    color = "国家"
  ) +
  theme_minimal()  # 可选:用简洁的主题美化图表

如果数据里存在缺失值,可以提前用drop_na()清理:

long_debt_data <- long_debt_data %>% drop_na()

三、关键问题解答

  • 是否需要为每个国家单独添加geom_line? 不需要。长格式数据会把所有国家的观测整合到同一组列中,ggplot会根据country的分组自动绘制对应折线,重复添加反而会冗余。
  • 是否需要先进行数据处理? 必须要。宽格式数据不符合ggplot的绘图逻辑,转成长期格式是高效绘图的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:15:48