上期我们搞定了Table 2(回归分析表),有了OR/HR和95%CI。但表格有个硬伤——审稿人要逐行扫数字才能判断谁显著、效应方向如何。森林图就是回归表的"视觉版":一眼看出谁显著、谁跨1、效应多大。这期我们用 forestploter 包,从单一森林图到多面森林图,讲透讲全,并附通用脚本。
一、森林图到底在画什么?

森林图的核心就三要素:

一张图读出三个问题:
✅效应方向(左保护右危险)
✅统计显著性(CI跨不跨线)
✅效应大小(点离线多远)
二、两种森林图,你用哪种?
A 单一森林图
一组效应量,一列图。最常见的场景:多因素回归结果可视化。

⭐⭐适用:单个Logistic/Cox/线性回归模型,把Table 2的数字画成图。
B 多面森林图
多组效应量并列,多列图。最常见的场景:粗模型 vs 调整模型,或多个结局指标对比。

⭐⭐适用:
✅Crude vs Adjusted:审稿人最想看"控制混杂前后的变化"
✅多结局对比:比如 TFI变化、PWI变化、SSB变化 三个指标
✅不同分组:比如新生儿滴度1:1-1:4 vs ≥1:8
判断标准很简单:你的数据有几组效应量要对比,就选哪种。一组→单一,两组及以上→多面。
三、R包选型:为什么用 forestploter?

⭐⭐⭐⭐⭐forestploter 的核心优势:
1、表格+图一体
:左侧变量名+右侧数值列+中间图形,一条命令搞定
2、多面原生支持
:est = list(...) 传入多组效应量,自动排列多列图
3、SCI出版级样式
:forest_theme() 控制所有细节,配色、字号、线宽一键调
4、edit_plot() 后处理
:加粗标题行、修改特定行样式,比ggplot2的theme更直观
四、数据准备:森林图的"前菜"
不管是单一还是多面,数据准备的套路一样——CSV文件,每行一个变量,NA表示分类标题行。
参考附件的single或multi.csv
五、森林图实操
本期自动化包已经把常见步骤封装好了:
✅自动检查并安装缺失 R 包;
✅弹窗选择 CSV/XLSX/XLS 数据文件;
✅自动判断单一森林图或多面板森林图;
✅自动识别分类标题行并加粗;
✅自动识别参考组并显示 Reference;
✅自动生成 300 dpi 图片;
✅支持 PNG、TIFF、PDF 三种输出;
✅自动估算图片尺寸,尽量减少四周空白。
对小白用户来说,核心操作只有一句:
source("ForestPlotSCI_一键森林图自动生成_source版_v1.0.R", encoding = "UTF-8")
如果在 RStudio 打开脚本,直接点击右上角 Source 即可。

六、SCI 森林图的 5 个细节
1. 参考线必须正确
OR、HR、RR 的参考线是 1;Beta、均数差、回归系数的参考线是 0。参考线错了,图就错了。
2. Reference 不要画点
参考组不是一个需要估计的效应量,应该显示 Reference,而不是强行画一个 OR=1 的点。
3. 分类标题要加粗
比如 Patient characteristics、Clinical factors 这类行,应该和下面的变量水平区分开。脚本会自动加粗。
4. 期刊投稿优先 TIFF/PDF
公众号、Word、PPT 用 PNG 很方便;期刊投稿常要求 TIFF 300 dpi;后期编辑建议保留 PDF。
5. 图不要留太多白边
森林图本质是表格和图形混排,白边太多会浪费版面。脚本会按行数自动估算尺寸,尽量压缩空白。
本期附件包包含:
ForestPlotSCI_一键森林图自动生成_source版_v1.0.R
templates/ForestPlotSCI_数据模板_single.csv
templates/ForestPlotSCI_数据模板_multi.csv
常见问题
CSV 中文乱码怎么办?
优先使用 Excel 模板;或者把 CSV 另存为 UTF-8。
结语
森林图不是“高级装饰”,而是把回归结果讲清楚的一种方式。
Table 2 负责严谨,森林图负责直观。
一个给审稿人查数,一个给审稿人看趋势。
这一期的目标很简单:把森林图从“要查代码、调参数、修白边”的麻烦事,变成一次 Source 就能完成的标准流程。