ggplot2绘图问询:同图绘制多回归直线及解决曲线未显示问题
问题1:在同一张图中添加TotalSold与Year的回归线
有两种实用方法可以实现需求:
方法1:直接追加图层
在现有代码基础上,新增geom_smooth层并指定y=TotalSold,同时通过颜色区分两条回归线,让图表更清晰:
ggplot(q,aes(Year)) + geom_point(aes(y = Price, color = "Price")) + geom_smooth(aes(y = Price, color = "Price"), method='lm') + geom_smooth(aes(y = TotalSold, color = "TotalSold"), method='lm') + labs(color = "指标") # 自定义图例标题
方法2:转换为长格式数据(更推荐)
ggplot对长格式数据的支持更好,用tidyr包将宽表转成窄表后,可一次性绘制所有变量的回归线,代码更简洁:
library(tidyr) # 转换数据格式 q_long <- q %>% pivot_longer(cols = c(Price, TotalSold), names_to = "Metric", values_to = "Value") # 绘图 ggplot(q_long, aes(Year, Value, color = Metric)) + geom_point() + geom_smooth(method = 'lm')
问题2:Age和Weight曲线未显示的解决方法
你的代码存在两个核心问题,对应解决方案如下:
1. 修复语法错误:补全图层连接符+
原代码中geom_line(aes(y = Age))和geom_line(aes(y = Weight))前缺少+,导致R仅执行到geom_line(aes(y = TotalSold)),后续代码被忽略。补全后代码如下:
ggplot(q, aes(Year, Price)) + geom_point(aes(color = "Price")) + geom_smooth(aes(color = "Price"), method = 'lm') + geom_line(aes(y = TotalSold, color = "TotalSold")) + geom_line(aes(y = Age, color = "Age")) + geom_line(aes(y = Weight, color = "Weight"))
2. 解决数值范围差异导致的图层压缩
即便补全+,如果Age、Weight与Price的数值范围相差过大,这两个变量的曲线会被挤到图的边缘甚至看不到。推荐两种解决方式:
方式A:分面展示(最直观)
转为长格式数据后,用分面将每个变量的趋势单独展示,每个分面使用独立的Y轴刻度:
library(tidyr) q_long <- q %>% pivot_longer(cols = c(Price, TotalSold, Age, Weight), names_to = "Metric", values_to = "Value") ggplot(q_long, aes(Year, Value)) + geom_point() + geom_smooth(method = 'lm') + facet_wrap(~Metric, scales = "free_y")
方式B:使用双Y轴(谨慎使用,易误导)
将部分变量映射到右侧Y轴,需先将变量缩放到相近范围:
# 假设Age和Weight远小于Price,先乘以合适系数(需根据实际数据调整) scale_factor <- 100 ggplot(q, aes(Year)) + geom_point(aes(y = Price, color = "Price")) + geom_smooth(aes(y = Price, color = "Price"), method = 'lm') + geom_line(aes(y = TotalSold, color = "TotalSold")) + geom_line(aes(y = Age * scale_factor, color = "Age")) + geom_line(aes(y = Weight * scale_factor, color = "Weight")) + scale_y_continuous( name = "Price", sec.axis = sec_axis(~./scale_factor, name = "TotalSold/Age/Weight") )
内容的提问来源于stack exchange,提问作者ShielaE2021
相关产品推荐
相关产品推荐

