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

ggplot2统一Y轴刻度及调整参数分组间距的技术求助

ggplot2绘图参数分组调整及ggh4x安装问题解决

一、参数分组靠近的实现(无需额外包)

鉴于无法正常安装ggh4x,这里提供基于基础ggplot2的实现方案,通过手动设置x轴位置实现同组参数的视觉靠近:

修改后完整代码

library(ggplot2)
library(cowplot)

# 图A数据:添加分组位置
d.conditional <- data.frame(
  parameter = c("ΨIg", "ΨTort|Ig.Pr", "ΨTort|Ig.Ab"),
  estimate = c(0.24, 0.07, 0.19),
  lower = c(0.18, 0.02, 0.13),
  upper = c(0.31, 0.20, 0.27),
  pos = c(1, 2.2, 2.8)  # 手动分配位置,使后两个参数靠近
)

# 图B数据:添加分组位置
d.tunnel <- data.frame(
  parameter = c("ΨIg.NT", "ΨIg.T", "ΨTort.NT", "ΨTort.T"),
  estimate = c(0.10, 0.30, 0.26, 0.12),
  lower = c(0.04, 0.22, 0.16, 0.07),
  upper = c(0.22, 0.39, 0.40, 0.19),
  pos = c(1.2, 1.8, 3.2, 3.8)  # 两组参数分别靠近,组间留空隙
)

# 图C数据:添加分组位置
d.PPmgmt <- data.frame(
  parameter = c("ΨIg.SP", "ΨIg.PP", "ΨTort.SP", "ΨTort.PP"),
  estimate = c(0.46, 0.13, 0.09, 0.20),
  lower = c(0.34, 0.08, 0.04, 0.14),
  upper = c(0.59, 0.21, 0.19, 0.28),
  pos = c(1.2, 1.8, 3.2, 3.8)  # 两组参数分别靠近,组间留空隙
)

# 绘制图A
figA <- ggplot(data = d.conditional, aes(x = pos, y = estimate)) +
  geom_errorbar(aes(ymin = upper, ymax = lower), width = 0.15, size = 0.8, color = "black") +
  geom_point(size = 4, shape = 21, fill = "black") +
  scale_x_continuous(breaks = d.conditional$pos, labels = d.conditional$parameter) +
  ylim(0, 0.6) +
  theme_bw() +
  theme(text = element_text(family = "Arial", size = 9)) +
  labs(x = "", y = "Estimated occupancy probability")

# 绘制图B
figB <- ggplot(data = d.tunnel, aes(x = pos, y = estimate)) +
  geom_errorbar(aes(ymin = upper, ymax = lower), width = 0.3, size = 0.8, color = "black") +
  geom_point(size = 4, shape = 21, fill = "black") +
  scale_x_continuous(breaks = d.tunnel$pos, labels = d.tunnel$parameter) +
  ylim(0, 0.6) +
  theme_bw() +
  theme(text = element_text(family = "Arial", size = 9)) +
  labs(x = "", y = "")

# 绘制图C
figC <- ggplot(data = d.PPmgmt, aes(x = pos, y = estimate)) +
  geom_errorbar(aes(ymin = upper, ymax = lower), width = 0.3, size = 0.8, color = "black") +
  geom_point(size = 4, shape = 21, fill = "black") +
  scale_x_continuous(breaks = d.PPmgmt$pos, labels = d.PPmgmt$parameter) +
  ylim(0, 0.6) +
  theme_bw() +
  theme(text = element_text(family = "Arial", size = 9)) +
  labs(x = "", y = "")

# 组合图形
combined_plots <- plot_grid(figA, figB, figC, labels = c("a", "b", "c"), ncol = 3)
combined_plots

原理说明

  • 为每个参数手动分配pos数值,让同组参数的位置数值更接近,不同组之间留出空隙,实现视觉上的分组效果
  • 通过scale_x_continuous将数值位置映射回原参数标签,保证x轴显示正确的参数名称

二、ggh4x安装失败的解决步骤

针对遇到的依赖缺失、版本不兼容问题,按以下顺序操作:

  1. 安装Xcode CommandLineTools
    在终端执行:

    xcode-select --install
    

    安装完成后重启R会话。

  2. 更新依赖包
    在R中执行以下命令,将rlang和ggplot2更新至满足ggh4x要求的版本:

    install.packages(c("rlang", "ggplot2"), dependencies = TRUE, type = "binary")
    

    若当前R版本过低(低于4.2.0),建议先更新R至最新版本,否则可能无法安装高版本依赖包。

  3. 重新安装ggh4x
    依赖更新完成后,执行:

    install.packages("ggh4x")
    

用ggh4x实现分组的代码(安装成功后可用)

若ggh4x安装正常,可使用其轴向导功能实现更简洁的分组,示例如下:

library(ggplot2)
library(cowplot)
library(ggh4x)

# 图A:添加分组标识
d.conditional$group <- c("Group1", "Group2", "Group2")
figA <- ggplot(data = d.conditional, aes(x = interaction(group, parameter), y = estimate)) +
  geom_errorbar(aes(ymin = upper, ymax = lower), width = 0.15, size = 0.8, color = "black") +
  geom_point(size = 4, shape = 21, fill = "black") +
  scale_x_discrete(breaks = d.conditional$parameter, 
                   guide = guide_axis_nested(delim = ".")) +  # 按分组嵌套显示轴标签
  ylim(0, 0.6) +
  theme_bw() +
  theme(text = element_text(family = "Arial", size = 9)) +
  labs(x = "", y = "Estimated occupancy probability")

# 图B、图C可参照此逻辑,添加分组后使用ggh4x实现分组靠近
# 其余代码与原代码一致,仅修改x轴相关部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:12:01