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

ggplot2图表添加右侧Y轴:展示ES与95%CI文本信息求助

在ggplot2森林图右侧添加ES+CI文本标注(模拟第二Y轴)

核心思路

ggplot2官方不推荐使用双Y轴(易误导读者),但可以通过在右侧对应位置添加文本标注的方式实现需求,同时保留变量旁的灰色竖线。具体步骤是:先绘制基础森林图,再用辅助数据框生成格式化后的ES+CI文本,最后将文本定位到图表右侧对应行的位置。

完整代码示例

library(ggplot2)

# 1. 模拟示例数据(替换成你的真实数据)
df <- data.frame(
  var = factor(c("变量A", "变量B", "变量C", "变量D"), 
               levels = c("变量A", "变量B", "变量C", "变量D")),
  es = c(-0.07, 0.32, -0.56, 0.89),
  ci_low = c(-1.16, -0.21, -1.02, 0.15),
  ci_high = c(0.99, 0.85, -0.10, 1.63)
)

# 2. 生成格式化后的ES+CI文本
df$es_ci_text <- sprintf("%.2f [%.2f, %.2f]", df$es, df$ci_low, df$ci_high)

# 3. 绘制图表
ggplot(df, aes(y = var)) +
  # 保留变量名旁的灰色竖线(从左到右贯穿)
  geom_vline(xintercept = 0, color = "gray80", linetype = "solid") +
  # 绘制CI误差线
  geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), 
                 color = "#2c3e50", height = 0.2) +
  # 绘制ES点
  geom_point(aes(x = es), color = "#e74c3c", size = 3) +
  # 添加右侧ES+CI文本标注(定位在CI最大值右侧的固定位置)
  geom_text(aes(x = max(df$ci_high) + 0.3, label = es_ci_text), 
            hjust = 0, color = "#34495e", size = 3.5) +
  # 设置X轴范围(预留右侧文本空间)
  xlim(min(df$ci_low) - 0.2, max(df$ci_high) + 2) +
  # 调整主题,隐藏右侧Y轴冗余元素
  theme_bw() +
  theme(
    axis.text.y = element_text(hjust = 1), # 变量名右对齐,靠近竖线
    axis.ticks.y.right = element_blank(),
    axis.text.y.right = element_blank()
  ) +
  labs(x = "效应量(ES)及95%置信区间", y = "")

关键细节说明

  • 文本格式化:用sprintf()函数精准控制小数位数,生成要求的ES [CI下限, CI上限]格式文本。
  • 竖线保留:geom_vline()绘制的灰色竖线会覆盖所有行,确保变量名旁的竖线正常显示。
  • 文本定位:通过x = max(df$ci_high) + 0.3将文本放在所有CI的右侧,避免与误差线重叠;hjust = 0实现文本左对齐。
  • X轴范围调整:xlim()预留足够空间放置右侧文本,避免内容被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:12:38