在R中用ggplot绘制3变量箱线图与散点图时出错求助
解决ISLR2 Boston数据集绘图异常问题
一、并列箱线图问题修正
你的箱线图显示异常,核心问题有两个:
cat_rm = rm直接保留了rm的连续数值属性(rm是房屋平均房间数,属于连续变量),导致facet_wrap(~cat_rm)为每个唯一的房间数生成一个面板,最终出现几百个小面板,完全无法正常查看。cat_chas = chas没有把0/1的数值转成分类因子,x轴会被当作连续轴展示,不符合分类变量的箱线图逻辑。
修正后的代码:
library(ISLR2) library(tidyverse) # 加载数据并处理分类变量 data <- Boston %>% mutate( # 将chas转成带标签的因子,明确分类含义 cat_chas = factor(chas, labels = c("远离河流", "紧邻河流")), # 把连续的rm分箱成3个类别,可根据需求调整breaks数量和标签 cat_rm = cut(rm, breaks = 3, labels = c("少房间", "中等房间", "多房间")) ) # 绘制正常的分面箱线图 ggplot(data, aes(x = cat_chas, y = medv)) + geom_boxplot(fill = "green", color = "black") + facet_wrap(~ cat_rm, ncol = 3) + labs( title = "按河流位置和房间数类别划分的medv箱线图", x = "查尔斯河邻近情况", y = "房屋中位价值(千美元)" ) + theme_minimal()
二、散点图问题修正
散点图的问题同样出在变量处理和数据对象上:
- 代码里的
BSTN对象从未定义过,应该用你处理后的data数据集或者原始Boston数据集。 cat_rm如果是连续的rm值,用颜色区分会显示渐变色彩,和你标注的“Category RM”(RM类别)不符,需要先把rm转成分类变量。
修正后的代码:
# 基于处理好的data数据集绘制散点图 ggplot(data, aes(x = age, y = medv, color = cat_rm)) + geom_point(alpha = 0.6) + # 加透明度避免点重叠,提升可读性 labs( title = "房屋中位价值与房龄的散点图(按房间数类别区分)", color = "房间数类别", x = "1940年前建成的自有住房比例", y = "房屋中位价值(千美元)" ) + theme( plot.title = element_text(color = "blue", size = 17), plot.background = element_rect(fill = "orange") )
如果只是想保留rm的连续值做颜色渐变,只需要把BSTN替换成data或Boston,但这种情况下建议把图例标题改成“平均房间数”,更符合实际展示逻辑。
内容的提问来源于stack exchange,提问作者user25331908
相关产品推荐
相关产品推荐

