线性回归绘图中绘制竖线失败,遇‘object y not found’报错求助
ggplot线性回归图添加竖线及报错修复
报错原因
你碰到的! object 'y' not found警告,是第二个图p2里的geom_smooth出了问题:
- 你的全局映射是
aes(x = x, y = y),但geom_smooth里写了formula= x~y——ggplot的stat_smooth默认把y轴变量当响应变量,你把x设成响应变量的反向写法,会导致计算时变量匹配混乱,触发找不到y的错误。
添加竖线+修复报错的完整代码
要画竖线(比如x=8.74),直接用geom_vline()就行,同时把p2的回归逻辑修正,代码如下:
# 图1:Y对X回归 + 竖线 p1 <- ggplot(df, aes(x = x, y = y))+ geom_point(col = "blue")+ geom_smooth(method='lm', formula= y~x, se = F, col = "black")+ # 新增竖线,参数可按需调整 geom_vline(xintercept = 8.74, col = "red", linetype = "dashed")+ theme_bw()+ theme(strip.text = element_text(size = 16), axis.title= element_text(size = 14), legend.position = "none")+ labs(title = "Y sobre X")+ annotate('text', x = median(df$x), y = max(df$y)+sd(df$y)/2, label = label_y, family= theme_get()$text[["family"]], size= theme_get()$text[["size"]]/2.5, fontface="italic") # 图2:X对Y回归(修复报错) + 竖线 p2 <- ggplot(df, aes(x = y, y = x))+ # 交换x/y映射,匹配回归逻辑 geom_point(col = "blue")+ geom_smooth(method='lm', formula= y~x, se = F, col = "black")+ # 这里的xintercept要对应当前x轴(原数据的y变量),按需调整 geom_vline(xintercept = 8.74, col = "red", linetype = "dashed")+ theme_bw()+ theme(strip.text = element_text(size = 16), axis.title= element_text(size = 14), legend.position = "none")+ labs(title = "X sobre Y")+ annotate('text', x = median(df$y), y = max(df$x)+sd(df$x)/2, label = label_x, family= theme_get()$text[["family"]], size= theme_get()$text[["size"]]/2.5, fontface="italic")
关键说明
- 修复
p2报错:要做X对Y的回归,直接交换全局映射的x和y(aes(x = y, y = x)),同时保持formula= y~x,这样符合ggplot“y轴是响应变量”的逻辑,不会再出现变量找不到的问题。 - 竖线设置:
geom_vline(xintercept = 数值)是ggplot画竖线的标准方法,还能通过linetype(比如虚线"dashed")、size、col参数调整样式。 p2竖线注意:如果p2的x轴换成了原数据的y变量,你要确认竖线的xintercept是对应原x的8.74,还是当前x轴的某个值,根据需求修改数值就行。
内容的提问来源于stack exchange,提问作者Amelia
相关产品推荐
相关产品推荐

