You need to enable JavaScript to run this app. R语言面板数据多变量分面折线图绘制及报错修正
优惠活动
大模型
产品
解决方案
定价
更多

R语言面板数据多变量分面折线图绘制及报错修正

问题根因

原代码触发报错的核心有两点:

  • 无参数的gather()会对全表所有列做长宽转换,连本应作为面板维度的unit_id、time列都会被揉进key、value两列里,转换完成后的数据集根本不存在time字段,自然无法匹配aes(time)的x轴要求。
  • 即使列名没丢,原代码也缺失两个关键映射:长表中存储数值结果的value列没有被设为y轴,代表国家的unit_id没有被设为线条分组,最终生成的折线会把不同国家、不同变量的数据错误串接。

修正代码

兼容原代码使用gather的旧版tidyr写法:

library(tidyverse)
exampl %>%
  # 仅转换除unit_id、time之外的所有数值变量,保留两个面板标识列
  gather(var_name, var_value, -unit_id, -time) %>%
  ggplot(aes(x = time, y = var_value, color = unit_id, group = unit_id)) +
  # 按变量拆分独立子图,开启自由坐标轴适配不同变量的取值范围
  facet_wrap(~ var_name, scales = "free") +
  geom_line(linewidth = 0.8) +
  # 叠加点位标记,让各年度观测值更易识别
  geom_point(size = 1.5)

如果使用新版tidyr语法(gather已逐步被pivot_longer替代),等价实现为:

exampl %>%
  pivot_longer(-c(unit_id, time),
               names_to = "var_name",
               values_to = "var_value") %>%
  ggplot(aes(x = time, y = var_value, color = unit_id, group = unit_id)) +
  facet_wrap(~ var_name, scales = "free") +
  geom_line(linewidth = 0.8)

实现效果

每个子图对应一个数值变量,每个国家生成一条独立的时间趋势折线,不同国家通过颜色区分,子图y轴会自动适配对应变量的量纲差异,不会因为某类变量取值范围过窄被压成水平线。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 19:45:00