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

如何在Base R中按prefinal组中位数对箱线图分组排序

按Prefinal组中位数降序排列箱线图的实现方案

要实现这个需求,核心是通过调整word变量的因子水平顺序,让它按照prefinal组中duration的中位数降序排列——因为箱线图的分组展示顺序是由因子的水平顺序决定的。具体步骤如下:

1. 计算Prefinal组各Word的中位数并排序

首先从数据中筛选出prefinal组的记录,计算每个word对应的duration中位数,再按中位数从高到低排序得到我们想要的word顺序:

# 提取prefinal组数据,计算每个word的duration中位数
prefinal_medians <- aggregate(duration ~ word, 
                              data = DATA[DATA$group == "prefinal", ], 
                              FUN = median)
# 按中位数降序提取word的顺序
sorted_words <- prefinal_medians[order(-prefinal_medians$duration), "word"]

2. 重置Word的因子水平

把原数据中的word转换为因子,并指定其水平顺序为我们刚得到的sorted_words:

DATA$word <- factor(DATA$word, levels = sorted_words)

3. 绘制箱线图

现在再绘制箱线图,就会自动按照我们设定的顺序排列了,同时调整坐标轴标签让展示更清晰:

boxplot(DATA$duration ~ DATA$group + DATA$word, 
        xaxt="n", 
        col = rep(c("blue", "red"), length(sorted_words)))
axis(1, 
     at = seq(from=1.5, to= length(sorted_words)*2 - 0.5, by=2), 
     labels = sorted_words, 
     cex.axis = 0.9)

完整可重复示例代码

为了方便你测试,这里附上包含数据生成的完整代码(设置随机种子保证结果一致):

set.seed(123) # 固定随机种子,确保示例数据可重复
DATA <- data.frame(
 group = c(rep("prefinal",10), rep("final", 10)),
 word = c(sample(LETTERS[1:5], 10, replace = T), sample(LETTERS[1:5], 10, replace = T)),
 duration = rnorm(20)
)

# 计算排序用的中位数
prefinal_medians <- aggregate(duration ~ word, 
                              data = DATA[DATA$group == "prefinal", ], 
                              FUN = median)
sorted_words <- prefinal_medians[order(-prefinal_medians$duration), "word"]

# 重置因子水平
DATA$word <- factor(DATA$word, levels = sorted_words)

# 绘图
boxplot(DATA$duration ~ DATA$group + DATA$word, 
        xaxt="n", 
        col = rep(c("blue", "red"), length(sorted_words)))
axis(1, 
     at = seq(from=1.5, to= length(sorted_words)*2 - 0.5, by=2), 
     labels = sorted_words, 
     cex.axis = 0.9)

这样处理后,箱线图的分组顺序就完全符合你的要求啦~

内容的提问来源于stack exchange,提问作者Chris Ruehlemann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:12