R语言ggplot2用geom_line按ID分组绘图出竖线怎么解决
问题根源
你的代码出现竖线的原因有两个核心错误:
- x轴映射错误:你将
ID设为x轴变量,同一个ID对应的所有数据点的x坐标完全相同,折线只能沿y轴垂直伸展,自然出现竖线。 - 数值类型错误:你定义
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
相关产品推荐
相关产品推荐

