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

R ggplot分组箱线图按属聚类并按属内du中位数升序排序实现方法

解决思路

核心是手动指定x轴变量gen_spe的因子水平,按「属优先级排序→属内物种按du中位数升序排序」的规则定义水平顺序,即可同时满足两个需求。

1. 数据预处理(调整因子水平)

使用dplyr对原数据做如下处理:

library(dplyr)
library(ggplot2)

df <- df %>%
  # 按属+物种分组,计算每个物种的du中位数
  group_by(gen, spe) %>%
  mutate(med_du = median(du, na.rm = TRUE)) %>%
  ungroup() %>%
  # 先按属排序保证同属物种相邻,再按属内中位数升序排列
  arrange(gen, med_du) %>%
  # 将gen_spe转为因子,水平指定为排序后的唯一值,直接控制x轴顺序
  mutate(gen_spe = factor(gen_spe, levels = unique(gen_spe)))

2. 绘图代码

处理后的数据直接套用你原来的绘图逻辑即可,仅需注意修正图例设置的冲突:

ggplot(df, aes(gen_spe, du)) +
  theme_classic(base_size = 10) +
  geom_boxplot(
    aes(color = gen,
        color = after_scale(
          colorspace::desaturate(color, .2)
        )),
    size = 0.75
  ) +
  ggsci::scale_color_npg() + # 移除原guide="none"参数,避免和下方图例设置冲突
  guides(color = "legend")

你当前的效果参考:
当前箱线图效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:48:02