使用R(RStudio)绘制逻辑回归分类图的坐标轴值异常问题
问题分析与解决方案
为什么y轴显示1.0和2.0而不是0和1?
这事儿我之前也碰到过,核心原因和R处理因子变量的底层逻辑有关——R里的因子(Factor)类型是用整数编码来存储的。你定义的vs是带有0和1两个水平的因子,R会自动把这两个标签映射成内部的整数1和2(因子的内部编码默认从1开始递增,和你看到的标签值无关)。当你直接用基础绘图函数plot()绘制因子变量时,R会调用它的内部整数值来生成坐标轴,所以y轴就显示成了1.0和2.0,而非你预期的0和1。
如何让y轴显示真实的0和1,同时正常绘制逻辑回归线?
给你几个实用的解决办法,适配不同场景:
方法1:把因子变量转为数值型后绘图
注意不能直接用as.numeric(c.data$vs)(那样会得到内部编码1和2),必须先转成字符再转数值:
# 将vs转换为真实的数值型变量 c.data$vs_num <- as.numeric(as.character(c.data$vs)) # 绘制散点图,y轴会显示0和1 plot(c.data$mpg, c.data$vs_num, ylab = "vs", ylim = c(0, 1))
这样处理后,后续绘制逻辑回归线也不会有异常。
方法2:手动调整基础绘图的y轴刻度与标签
如果不想修改原变量的类型,可以在绘图时手动指定y轴的刻度位置和对应标签:
# 先绘制图形但不显示y轴 plot(c.data$mpg, c.data$vs, yaxt = "n", ylab = "vs") # 手动添加y轴:at是因子的内部编码位置,labels是要显示的真实标签 axis(side = 2, at = c(1, 2), labels = c("0", "1"))
方法3:用ggplot2绘图(更省心的方案)
ggplot2会自动识别因子的标签,默认就会显示0和1,不需要额外折腾:
library(ggplot2) ggplot(c.data, aes(x = mpg, y = vs)) + geom_point() + # 若需要明确指定y轴标签,可添加这行(默认其实已经显示正确) scale_y_discrete(breaks = c("0", "1"), labels = c("0", "1"))
绘制正确的逻辑回归线示例
不管用哪种方法,拟合逻辑回归模型后,可以这样绘制回归线:
# 拟合逻辑回归模型 model <- glm(vs ~ mpg, data = c.data, family = binomial) # 生成用于预测的mpg序列 new_mpg <- seq(min(c.data$mpg), max(c.data$mpg), length.out = 100) # 预测对应的概率值 pred_prob <- predict(model, newdata = data.frame(mpg = new_mpg), type = "response") # 基础绘图版本(搭配方法1的数值型变量) plot(c.data$mpg, c.data$vs_num, ylab = "vs", ylim = c(0, 1)) lines(new_mpg, pred_prob, col = "red", lwd = 2) # ggplot2版本 ggplot(c.data, aes(x = mpg, y = as.numeric(as.character(vs)))) + geom_point() + geom_line(aes(y = pred_prob), data = data.frame(mpg = new_mpg, pred_prob = pred_prob), color = "red", linewidth = 2) + ylab("vs") + ylim(0, 1)
内容的提问来源于stack exchange,提问作者claudioz
相关产品推荐
相关产品推荐

