如何按婚姻状态绘制工资的密度图?现有ggplot2代码仅生成单条曲线
修正方案:按婚姻状态分组绘制工资密度图
你的代码只生成单条曲线的核心原因是married变量为数值型(0/1),ggplot将其识别为连续变量,而非离散的分组标记,因此无法按婚姻状态拆分曲线。以下是两种修正方式:
方式1:提前将婚姻状态转为因子(推荐)
先把married变量转换为因子类型,明确分组标签,再绘图:
nls80 = read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/nls80(1).csv') library(ggplot2) # 将数值型married转为因子,自定义标签 nls80$married <- factor(nls80$married, levels = c(0, 1), labels = c("未婚", "已婚")) # 绘制分组密度图 ggplot(nls80, aes(x = wage, colour = married)) + geom_density() + # 可选:添加更清晰的标签 labs( title = "不同婚姻状态的工资分布密度图", x = "工资", y = "密度", colour = "婚姻状态" )
方式2:在绘图时直接转换变量类型
如果不想修改原始数据,可以在aes映射中直接转换married的类型:
nls80 = read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/nls80(1).csv') library(ggplot2) ggplot(nls80, aes(x = wage, colour = factor(married, labels = c("未婚", "已婚")))) + geom_density() + labs(colour = "婚姻状态")
关键说明
- 当
married是数值型时,colour = married会映射为连续的颜色渐变,ggplot不会进行分组;转为因子后,变量变为离散的两类,ggplot会自动按分组绘制两条独立的密度曲线。 - 可以通过
str(nls80$married)命令查看变量的原始类型,确认是否为数值型。
内容的提问来源于stack exchange,提问作者bandcar
相关产品推荐
相关产品推荐

