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

如何用R ggplot绘制数据框箱线图并按中位数排序?

用ggplot绘制按中位数排序的单维度箱线图

核心思路

ggplot依赖长格式数据工作,所以先把宽格式的数值列转成"变量-数值"的长格式,再计算每个变量的中位数,通过将变量转为有序因子实现按中位数排序,最后绘制箱线图。

完整代码示例(以移除Species列的iris数据集模拟你的数据)

# 加载所需工具包
library(tidyverse)

# 模拟你的数据集:仅保留数值列
data <- iris %>% select(-Species)

# 1. 将宽格式数据转换为长格式
data_long <- data %>% 
  pivot_longer(
    cols = everything(),  # 选中所有数值列
    names_to = "Variable",  # 原列名存入新列Variable
    values_to = "Value"     # 原数值存入新列Value
  )

# 2. 计算每个变量的中位数并确定排序顺序
median_order <- data_long %>% 
  group_by(Variable) %>% 
  summarize(Median = median(Value)) %>% 
  arrange(Median)  # 默认从小到大排序,如需从大到小改为arrange(desc(Median))

# 3. 将Variable转为有序因子,绑定排序依据
data_long$Variable <- factor(data_long$Variable, levels = median_order$Variable)

# 4. 绘制箱线图
ggplot(data_long, aes(x = Variable, y = Value)) +
  geom_boxplot(fill = "#4292c6", alpha = 0.7) +  # 可选:自定义填充色和透明度
  labs(x = "", y = "数值") +  # 自定义轴标签
  theme_minimal()  # 可选:使用简洁主题

关键步骤说明

  • 转长格式:ggplot的图层逻辑更适配"变量-数值"的成对结构,pivot_longer能快速完成宽转长的转换。
  • 按中位数排序:先算出每个变量的中位数,再把变量名的因子水平按中位数顺序重排,这样ggplot绘制时x轴会自动遵循这个排序规则。
  • 与基础R的差异:基础R中boxplot(data, sort = TRUE)可直接实现按中位数排序,但ggplot需要手动处理因子水平,优势是样式调整的灵活性更强。

内容的提问来源于stack exchange,提问作者Celina Steffani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:09:55