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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:56:09