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

ggpubr按分组设置不同升降序、不排序规则的实现方法

ggpubr分组自定义排序规则的最小改动方案

ggpubr的sort.val参数仅支持全局统一排序规则,原生不支持多分组传入不同排序参数。最小改动的替代方案是提前对数据集按分组要求排序后,将x轴变量设置为对应顺序的因子,无需修改原有绘图的样式参数,仅需关闭ggpubr自带的排序逻辑即可。

以下是完整可运行实现代码:

# 加载依赖包
library(ggpubr)
library(dplyr)

data("mtcars")
dfm <- mtcars
# 将cyl转换为因子类型
dfm$cyl <- as.factor(dfm$cyl)
# 新增车型名列
dfm$name <- rownames(dfm)

# --------------------新增的预处理代码:按分组自定义排序--------------------
# 按cyl的因子水平顺序,对应设置每个分组的排序规则:4缸升序、6缸不排序、8缸降序
sort_rules <- setNames(c("asc", "none", "desc"), levels(dfm$cyl))

dfm_sorted <- dfm %>%
  group_by(cyl) %>%
  group_modify(~ {
    cur_rule <- sort_rules[cur_group()$cyl]
    if (cur_rule == "asc") {
      arrange(.x, mpg)
    } else if (cur_rule == "desc") {
      arrange(.x, desc(mpg))
    } else {
      .x # 不排序直接返回原分组内顺序
    }
  }) %>%
  ungroup()

# 将x轴的name变量设置为按排序后的顺序的因子
dfm_sorted$name <- factor(dfm_sorted$name, levels = dfm_sorted$name)
# --------------------预处理代码结束--------------------

# 原有绘图代码仅修改2个排序参数即可,其余样式配置完全保留
ggbarplot(dfm_sorted, x = "name", y = "mpg",
          fill = "cyl",
          color = "white",
          palette = "jco",
          sort.val = "none", # 关闭ggpubr自带的全局排序
          sort.by.groups = FALSE, # 关闭ggpubr自带的组内排序
          x.text.angle = 90
)

补充说明:

  • 如果不想引入dplyr依赖,也可以用base R的split+lapply+do.call(rbind)组合完成分组排序,逻辑完全一致
  • 排序规则可以灵活调整,只要和cyl的因子水平顺序一一对应即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 08:12:02