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

如何用ggplot2实现单暴露对应双结果的上下排布森林图

解决ggplot2森林图同一暴露多结果纵向排布问题

要实现同一暴露下两个结果上下排布,核心是给同一暴露的不同结果设置y轴位置偏移,具体步骤如下:

1. 预处理数据

首先把数据中字符型的数值列转成数值类型,同时为每个暴露的不同结果生成带偏移的y轴位置:

library(ggplot2)
library(dplyr)

# 转换数值列并生成偏移后的y轴位置
df <- df %>%
  mutate(
    across(c(b, cidown, ciup), as.numeric),
    # 将暴露分组转为数值,再根据data类型添加偏移
    y_pos = as.numeric(factor(exposure)) + case_when(
      data == "d" ~ -0.2,
      data == "r" ~ 0.2
    )
  )

2. 绘制森林图

用新生成的y_pos作为y轴映射,再自定义y轴刻度显示原暴露名称:

ggplot(df, aes(x = b, y = y_pos, xmin = cidown, xmax = ciup)) +
  geom_point(size = 4, aes(shape = data)) +
  geom_pointrange(shape = 1, show.legend = TRUE) +
  # 替换y轴刻度为原暴露名称
  scale_y_continuous(
    breaks = as.numeric(factor(unique(df$exposure))),
    labels = unique(df$exposure)
  ) +
  theme(text = element_text(family = "short"))

关键说明

  • 数值列转换:原数据中b、cidown、ciup为字符型,必须转成数值才能正确绘制置信区间。
  • y轴偏移:±0.2的偏移量可根据需求调整,只要保证同一暴露的两个结果在视觉上区分开且不重叠即可。
  • 刻度自定义:通过scale_y_continuous将数值型的y轴刻度替换为原暴露名称,保证y轴显示清晰直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:29