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

如何在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自动换行:

  1. 安装并加载工具包:
install.packages("patchwork")
library(patchwork)
  1. 生成所有生存曲线对象:
# 替换为你的实际生存分析代码
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)
  1. 自定义布局:
  • 一行3个图(共2行):(p1 + p2 + p3) / (p4 + p5 + p6)
  • 一行4个图(补空白占位符对齐):(p1 + p2 + p3 + p4) / (p5 + p6 + plot_spacer() + plot_spacer())
  1. 在.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:49:53