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

如何用ggplot2基于R中Boruta的结果绘制箱线图

用ggplot2绘制多变量箱线图的解决方案

核心思路

ggplot2更适合处理长格式数据,而你的多变量数据是宽格式(每列对应一个变量),所以第一步需要将宽格式转换为长格式,再通过主题调整、分面等方式优化可视化的可读性。

具体实现步骤

1. 加载所需包

使用tidyverse包集合(包含ggplot2用于可视化,tidyr用于数据格式转换):

library(tidyverse)

2. 准备数据

假设你已有一个包含上百个变量的宽格式数据框,这里模拟一个100个变量、50个观测的示例数据供演示:

# 固定随机种子确保结果可复现
set.seed(123)
# 生成50行、100列的模拟数据,变量名命名为var1到var100
wide_data <- data.frame(
  replicate(100, rnorm(50, mean = sample(1:10, 100, replace = TRUE), sd = 2))
)
colnames(wide_data) <- paste0("var", 1:100)

3. 转换为长格式数据

用tidyr::pivot_longer将宽数据转成长数据,每一行对应一个变量的单个观测值:

long_data <- wide_data %>%
  pivot_longer(
    cols = everything(),  # 选择所有列
    names_to = "variable", # 原列名存入新列"variable"
    values_to = "value"    # 原列值存入新列"value"
  )

4. 绘制基础箱线图(解决标签重叠问题)

绘制箱线图并通过旋转x轴标签、缩小字体优化可读性:

ggplot(long_data, aes(x = variable, y = value)) +
  geom_boxplot(fill = "#4292c6", alpha = 0.7) + # 设置填充色与透明度
  labs(title = "多变量箱线图", x = "变量", y = "数值") +
  theme_minimal() +
  # 调整x轴标签避免重叠
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 6),
    plot.title = element_text(hjust = 0.5, size = 14)
  )

5. 优化:分面展示(超多样变量适用)

如果变量数量过多(如100个),即使旋转标签仍拥挤,可通过分面拆分为多个小面板:

ggplot(long_data, aes(x = variable, y = value)) +
  geom_boxplot(fill = "#4292c6", alpha = 0.7) +
  labs(title = "多变量分面箱线图", y = "数值") +
  theme_minimal() +
  # 按变量分面,每行10个面板,y轴刻度自由调整
  facet_wrap(~variable, scales = "free_y", ncol = 10) +
  # 隐藏冗余的x轴标签与标题
  theme(
    axis.text.x = element_blank(),
    axis.title.x = element_blank(),
    plot.title = element_text(hjust = 0.5, size = 14),
    strip.text = element_text(size = 8) # 调整分面标签大小
  )

6. 进阶:按中位数排序变量

若想让变量按中位数排序,使箱线图更具规律性,可先计算中位数再重新排序:

# 计算每个变量的中位数并排序
sorted_vars <- long_data %>%
  group_by(variable) %>%
  summarise(median_val = median(value)) %>%
  arrange(median_val) %>%
  pull(variable)

# 将variable转换为有序因子,按中位数排序
long_data$variable <- factor(long_data$variable, levels = sorted_vars)

# 绘制排序后的箱线图
ggplot(long_data, aes(x = variable, y = value)) +
  geom_boxplot(fill = "#4292c6", alpha = 0.7) +
  labs(title = "按中位数排序的多变量箱线图", x = "变量", y = "数值") +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 6),
    plot.title = element_text(hjust = 0.5, size = 14)
  )

内容的提问来源于stack exchange,提问作者Genevieve Gabriel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:49:11