如何避免R Markdown编织时森林图(Forest Plot)被截断?
R Markdown编织HTML时森林图截断的解决方案
方法1:调整代码块图形尺寸参数
这是最常用的解决方案,通过修改R代码块的输出图形宽高,适配森林图的内容量:
- 单个代码块调整:在代码块头部添加
fig.height和fig.width参数,你的示例包含23项研究,推荐高度设为10-14,宽度设为9-12,示例代码块声明如下:{r, fig.height=12, fig.width=10, echo=FALSE} # 森林图生成代码放在此处 - 全局统一调整:如果多个代码块都生成森林图,可在文档最开头的setup配置块中设置全局参数,避免每个块重复修改:
knitr::opts_chunk$set( fig.height = 12, fig.width = 10, out.width = "100%" # 可选配置,让图形自动适配HTML页面宽度 )
方法2:调整森林图本身的渲染参数
如果调整块参数后还有局部内容截断,可以修改forest.meta的绘图参数缩小内容占比:
- 调整全局字体缩放系数
cex,降低字体大小腾出空间,比如设置cex=0.8 - 自定义x轴范围,替换默认的
xlim="symmetric",根据你的效应量范围设置合适的区间,比如xlim=c(-15,15) - 调整左侧标签列宽度,用
leftcols.width参数适配长作者名,比如leftcols.width=c(4,2,2)
调整后的完整可运行示例
author = c("aaaaaaaaaa", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "t", "u", "v", "w", "x") Ne = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 34, 5, 6, 7, 8, 4, 3, 2, 7, 3, 6, 7, 8, 5) Me = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 34, 5, 6, 7, 8, 4, 3, 2, 7, 3, 6, 7, 8, 5) SDe = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 34, 5, 6, 7, 8, 4, 3, 2, 7, 3, 6, 7, 8, 5) Nc = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 34, 5, 6, 7, 8, 4, 3, 2, 7, 3, 6, 7, 8, 5) Mc = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 34, 5, 6, 7, 8, 4, 3, 2, 7, 3, 6, 7, 8, 5) SDc = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 34, 5, 6, 7, 8, 4, 3, 2, 7, 3, 6, 7, 8, 5) df = data.frame(author, Ne, Me, SDe, Nc, Mc, SDc) m.cont <- meta::metacont(n.e = Ne, mean.e = Me, sd.e = SDe, n.c = Nc, mean.c = Mc, sd.c = SDc, studlab = author, data = df, sm = "SMD", method.smd = "Hedges", fixed = FALSE, random = TRUE, method.tau = "REML", hakn = TRUE, title = "Example") meta::forest.meta(m.cont, sortvar = TE, predict = TRUE, print.tau2 = FALSE, leftlabs = c("Author", "g", "SE"), xlim = c(-15,15), # 自定义x轴范围 cex = 0.8, # 缩小字体 leftcols.width = c(4,2,2)) # 调整左侧列宽度
将上述代码放在设置了fig.height=12, fig.width=10的代码块中,编织HTML即可输出完整的森林图。
内容的提问来源于stack exchange,提问作者labcat
相关产品推荐
相关产品推荐

