如何在Rnw knit PDF文档中一行并排3个及以上R绘图?
实现一行多子图的解决方案
方法1:调整knitr代码块参数(快速实现)
核心是通过out.width控制单个子图的宽度,配合fig.show='hold'实现并排布局:
- 一行3个图:设置
out.width = "30%"(3×30% = 90%,预留间距避免拥挤) - 一行4个图:设置
out.width = "22%"(4×22% = 88%,预留间距) - 注意:总宽度不要超过100%,否则会自动换行;可根据需求微调百分比(比如29%、23%)来调整间距
修改后的代码示例(一行3个图)
\documentclass{article} \usepackage[left=1cm, top=1cm, right=1cm, bottom=3cm]{geometry} \pagenumbering{gobble} \begin{document} \begin{figure} \centering << os_km_curves_1, eval = TRUE, include = TRUE, echo= FALSE, out.width = "30%", fig.show = 'hold', message = FALSE>>= # 图1A plot(mpg ~ hp, data = mtcars, pch = 19, col = "red", cex = 1, main = "plot 1") # 图1B plot(mpg ~ hp, data = mtcars, pch = 18, col = "blue", cex = 1.1, main = "plot 2") # 图1C plot(mpg ~ hp, data = mtcars, pch = 17, col = "green", cex = 1.2, main = "plot 3") # 图1D plot(mpg ~ hp, data = mtcars, pch = 16, col = "black", cex = 1.3, main = "plot 4") # 图1E plot(mpg ~ hp, data = mtcars, pch = 15, col = "orange", cex = 1.4, main = "plot 5") # 图1F plot(mpg ~ hp, data = mtcars, pch = 14, col = "violet", cex = 1.5, main = "plot 6") @ \caption{Three figures in one line} \end{figure} \end{document}
方法2:用patchwork组合ggplot对象(推荐用于ggsurvplot)
由于你实际使用的是ggsurvplot生成ggplot对象,这种方法能更精准控制布局,避免依赖knitr自动换行:
- 安装并加载工具包:
install.packages("patchwork") library(patchwork)
- 生成所有生存曲线对象:
# 替换为你的实际生存分析代码 p1 <- ggsurvplot(surv_obj1, data = your_data) p2 <- ggsurvplot(surv_obj2, data = your_data) p3 <- ggsurvplot(surv_obj3, data = your_data) p4 <- ggsurvplot(surv_obj4, data = your_data) p5 <- ggsurvplot(surv_obj5, data = your_data) p6 <- ggsurvplot(surv_obj6, data = your_data)
- 自定义布局:
- 一行3个图(共2行):
(p1 + p2 + p3) / (p4 + p5 + p6) - 一行4个图(补空白占位符对齐):
(p1 + p2 + p3 + p4) / (p5 + p6 + plot_spacer() + plot_spacer())
- 在.rnw中调用:
\begin{figure} \centering << combine_plots, eval=TRUE, echo=FALSE, message=FALSE>>= # 生成绘图对象(替换为你的代码) p1 <- ggsurvplot(...) p2 <- ggsurvplot(...) p3 <- ggsurvplot(...) p4 <- ggsurvplot(...) p5 <- ggsurvplot(...) p6 <- ggsurvplot(...) # 组合为3×2布局 combined_plot <- (p1 + p2 + p3) / (p4 + p5 + p6) print(combined_plot) @ \caption{Custom layout with patchwork} \end{figure}
这种方法支持自由调整子图相对大小、添加统一标题/注释,适合复杂的生存曲线排版需求。
内容的提问来源于stack exchange,提问作者CharlesLDN
相关产品推荐
相关产品推荐

