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

在ggplot2中自定义模型标签并调整分面内y轴排序

解决ggplot2分面图的两个自定义需求

修改后的完整代码

library(ggplot2)
library(forcats)

# 定义自定义标签映射
label_map <- c(
  "a" = "Label1",
  "b" = "Label2",
  "c" = "Label3",
  "d" = "Label4",
  "e" = "Label5",
  "f" = "Label6"
)

ggplot(d, aes(y = fct_rev(modelnum), x = odds_ratio, color = sample,
               xmin = ci_lower, xmax = ci_upper)) +
  geom_errorbar(width = .1) +
  geom_point(size = 3) +
  geom_vline(xintercept = 1, 
             linetype = "dashed", 
             color = "black",
             linewidth = .3) +
  facet_wrap(~sample,
             scales = "free_y",
             nrow = 3) +
  scale_color_manual(values = c("Never" = "gray30",
                                "Pooled" = "red",
                                "Post" = "blue")) +
  scale_y_discrete(labels = label_map, name = "") +
  labs(title = "Models",
       x = "Odds Ratio") +
  theme_bw() +
  theme(legend.position = "none")

需求1:添加自定义y轴标签

通过定义标签映射向量label_map,将每个modelnum的原始字母对应到自定义文本,再在scale_y_discrete()中传入labels = label_map参数,即可替换y轴上的原始标识为自定义标签。

需求2:反转分面内的字母排序

有两种简单实现方式:

  • 方式一:在aes()中使用fct_rev(modelnum)(需加载forcats包),直接反转离散变量的顺序,每个分面内的y轴会自动按字母倒序排列(靠后的字母位于顶部)。
  • 方式二:若不想加载额外包,可在scale_y_discrete()中添加limits = rev参数,效果完全一致:
    scale_y_discrete(labels = label_map, limits = rev, name = "")
    

补充说明

由于使用了facet_wrap(~sample, scales = "free_y"),每个分面的y轴仅显示当前分面存在的modelnum值,上述两种反转方式会自动适配每个分面的独立y轴,无需额外处理分面间的差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:47:09