R语言基于UCI Adult数据集绘制散点图报错及疑问求助
问题根因
报错和图形异常来自两个核心问题:
- 公式解析警告触发逻辑:绘图公式跨数据集调用原始
adult对象的V4列,但传入data参数的清洗后数据集adult_trim,在预处理第一步就删除了第4列(V4),后续也完成了全字段重命名,根本不存在V4列。R的plot.formula接口在指定data环境下查找变量失败时,会错误将jitter函数的参数逗号识别为公式分隔符,把完整双变量公式拆成两个单变量对常数1的片段,最终只能输出单变量分布,无法生成双变量散点。 - 数据集引用为示例笔误:预处理步骤生成
adult_trim的核心目的就是删除冗余列、过滤缺失值、替换为易读列名,绘图阶段反而调用未清洗的原始adult数据集,本身就是示例代码的书写错误。此外原绘图公式的X、Y轴位置都错写为adult$V4(对应教育程度字段),完全没有调用X轴所需的收入字段,和「X轴为Income、Y轴为Education」的需求完全不匹配。
修正后可运行代码
# 加载依赖 library(ggplot2) # 导入原始数据 adult = read.csv("adult.DATA", header = FALSE, stringsAsFactors = TRUE) # 按课程步骤完成数据清洗 adult_trim = adult[,-c(3,4,11,12)] names(adult_trim) <- c("Age", "WorkClass", "Education", "Marital.Status", "Occupation", "Relationship", "Race", "Sex", "Hours.per.Week", "Native.Country", "Income") adult_trim <- adult_trim[rowSums(adult_trim == "?") ==0, -c(7,10), drop = FALSE] # 绘制目标抖动散点图 plot( jitter(as.numeric(Education), 0.5) ~ jitter(as.numeric(Income), 0.5), data = adult_trim, xlab = "Income", ylab = "Education", pch = 19, cex = 1, bty = "n", xlim = c(1,2), col = rgb(180,0,180,30, maxColorValue = 255) )
注:代码删除了原片段中无意义的adult$V4 = as.factor(as.character(adult$V4))步骤,清洗后的adult_trim已经保留了正确格式的字段,无需再操作原始数据集的废弃列。
关键修正说明
- 变量映射对齐需求:R基础绘图的公式遵循
Y轴变量 ~ X轴变量的规则,修正后Y轴映射多分类字段Education(教育程度)、X轴映射二分类字段Income(收入),和预设轴标签完全匹配;对因子转数值后的坐标添加jitter扰动,避免点完全重叠无法展示分布密度。 - 统一使用清洗后数据集:所有绘图变量从
adult_trim中读取,自动过滤了带?的缺失值,也无需记忆V开头的默认列名,从根源避免变量查找失败触发的公式解析错误。 - 规范参数写法:将原代码中不规范的
xlim = c(1:2)调整为标准范围写法xlim = c(1,2),准确匹配收入字段的两个因子水平范围。
内容的提问来源于stack exchange,提问作者a mitchell
相关产品推荐
相关产品推荐

