如何在R语言中为散点图和直方图设置y轴整数刻度值
问题解决:分类变量绘图轴刻度异常及函数误用问题
核心错误原因
你用的scale_y_continuous(breaks=pretty_breaks())是ggplot2包专属的绘图语法,但你的代码用的是基础R的plot()和hist()函数,两者语法不兼容,所以会报错。此外,你的Class列是0/1的分类变量,但你把它当成连续变量处理,导致轴出现不必要的小数刻度。
针对散点图的修正方案
把Class转为因子类型,让绘图系统识别它是分类变量,同时手动指定y轴刻度只显示0和1:
options(scipen = 999) pdf("visualization.pdf") library(tidyverse) dataset <- read.csv("creditcard.csv") # 将Class转为因子,明确是分类变量 dataset$Class <- as.factor(dataset$Class) # 散点图绘制 plot(dataset$Amount, dataset$Class, main = "交易金额与信用卡欺诈的相关性", xlab = "交易金额", ylab = "欺诈标记(0=正常,1=欺诈)", pch = 19, frame = T ) # 拟合回归直线(因变量为因子时lm会自动适配逻辑回归逻辑,如需线性回归可保留数值型) m <- lm(as.numeric(Class) ~ Amount, data = dataset) abline(m, col = "green")
如果需要精准控制y轴刻度,可添加自定义轴设置:
plot(dataset$Amount, dataset$Class, main = "交易金额与信用卡欺诈的相关性", xlab = "交易金额", ylab = "欺诈标记(0=正常,1=欺诈)", yaxt = "n", # 先隐藏默认y轴 pch = 19, frame = T ) # 手动添加y轴刻度 axis(2, at = c(0,1), labels = c("0", "1")) m <- lm(as.numeric(Class) ~ Amount, data = dataset) abline(m, col = "green")
针对直方图的修正方案
Class是分类变量,用直方图不合适,建议改用条形图展示两类的数量分布:
# 统计两类的频数 class_counts <- table(dataset$Class) # 绘制条形图 barplot(class_counts, main = "信用卡欺诈与正常交易数量分布", xlab = "欺诈标记(0=正常,1=欺诈)", ylab = "交易数量", col = "red" )
如果坚持要用直方图(不推荐),可手动设置x轴刻度为0和1:
h <- hist(as.numeric(dataset$Class), breaks = c(-0.5, 0.5, 1.5), # 让直方图刚好框住0和1两个值 main = "信用卡欺诈标记分布", xlab = "欺诈标记(0=正常,1=欺诈)", ylab = "交易数量", col = "red" ) # 手动设置x轴刻度 axis(1, at = c(0,1), labels = c("0", "1"))
额外说明
如果想使用scale_y_continuous()这类语法,需要切换到ggplot2绘图体系,比如散点图可以这样写:
ggplot(dataset, aes(x = Amount, y = Class)) + geom_point() + geom_smooth(method = "lm", color = "green") + scale_y_discrete(breaks = c("0", "1")) + # 分类变量用scale_y_discrete而非continuous labs(title = "交易金额与信用卡欺诈的相关性", x = "交易金额", y = "欺诈标记(0=正常,1=欺诈)")
内容的提问来源于stack exchange,提问作者cookie s
相关产品推荐
相关产品推荐

