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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:31:32