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

R语言ggplot2用geom_line按ID分组绘图出竖线怎么解决

问题根源

你的代码出现竖线的原因有两个核心错误:

  1. x轴映射错误:你将ID设为x轴变量,同一个ID对应的所有数据点的x坐标完全相同,折线只能沿y轴垂直伸展,自然出现竖线。
  2. 数值类型错误:你定义Var1、Var2时加了引号,生成的是字符型向量,后续绘图时会按离散类别处理,无法正确按数值顺序连线。

修复方案

如果你需要实现每个ID对应一条折线,x轴为Var1取值、y轴为Var2取值的效果,不需要做pivot_longer转换,直接按以下代码修改即可:

ID = c("279557", "279557","279557", "279557", "280485", "280485", "280485", "280485")
# 去掉引号,定义为数值型
Var1 = c(1000, 1500, 2000, 3000, 1100, 1700, 2900, 3500)
Var2 = c(3500, 4800, 5500, 6800, 3800, 5800, 6500, 7800)

library(tidyverse)
df = data.frame(ID, Var1, Var2)

df %>% 
  ggplot(aes(x = Var1, y = Var2, group = ID, color = ID)) +
  geom_line(size = 1) +
  labs(x = "Var1",y = "Var2")

如果你确实需要把Var1、Var2都作为y轴取值,绘制每个ID下Var1到Var2的变化折线,可以按以下代码处理:

ID = c("279557", "279557","279557", "279557", "280485", "280485", "280485", "280485")
Var1 = c(1000, 1500, 2000, 3000, 1100, 1700, 2900, 3500)
Var2 = c(3500, 4800, 5500, 6800, 3800, 5800, 6500, 7800)

library(tidyverse)
df = data.frame(ID, Var1, Var2)

df = df %>% 
  # 先给每个ID内的观测加序号,标记配对的Var1和Var2
  group_by(ID) %>% 
  mutate(obs_id = row_number()) %>% 
  ungroup() %>% 
  pivot_longer(-c(ID, obs_id))   

df %>% 
  ggplot(aes(x = name, y = value, group = interaction(ID, obs_id), color = ID)) +
  geom_line(size = 1) +
  labs(x = "变量类型",y = "数值")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:08