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

R Markdown导出PDF时Shiny动态图与描述左右对齐的实现方法咨询

可行实现方案

以下两种方案均无需提前导出PNG文件,可适配动态生成绘图的需求,完美实现左图右说明的对齐布局:


方案1:基于LaTeX minipage实现(适配基础绘图/ggplot2,PDF输出最优)

目标输出为PDF场景下,直接调用LaTeX原生布局语法可控性最高,单页最多放5组只需要调整每组的垂直间距即可。

完整R Markdown示例:

---
title: "雷达图报告"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, warning=FALSE, message=FALSE, out.width="100%")
library(fmsb)
每组图和说明的结构如下,重复5次即可铺满单页:
```latex
\vspace{0.8em}
\begin{minipage}{0.48\textwidth}
```{r}
# 直接在此处写绘图代码,无需导出PNG
df <- data.frame(
  row.names=c("Max", "Min", "Data"),
  rbind(
    rep(5, 6),
    rep(1, 6),
    sample(1:5, 6, replace=TRUE)
  )
)
radarchart(
  df,
  vlabels=c(1,2,3,4,5,6), 
  caxislabels=c(1,2,3,4,5)
)
```latex
\end{minipage}
\hfill
\begin{minipage}{0.48\textwidth}
*图1:XX维度雷达图*
- 指标1:表现优秀,得分4.2
- 指标3:待提升,得分1.8
- 整体水平:中等
\end{minipage}
\vspace{0.8em}

如果是Shiny动态生成N组内容,可以用knitr::knit_expand()批量生成上述结构,完全适配动态场景。


方案2:基于patchwork拼接实现(适配ggplot2,跨格式兼容)

如果后续切换为ggplot2生态绘制雷达图,可以用patchwork包直接拼接图表和文本grob,不需要写LaTeX代码,同时兼容HTML、PDF等多种输出格式。

示例代码:

```{r}
library(ggplot2)
library(ggradar)
library(patchwork)
library(grid)

# 绘制雷达图
df_radar <- data.frame(
  group = "Data",
  `1` = sample(1:5,1),
  `2` = sample(1:5,1),
  `3` = sample(1:5,1),
  `4` = sample(1:5,1),
  `5` = sample(1:5,1),
  `6` = sample(1:5,1)
)
p <- ggradar(df_radar,
             values.radar = c("1","2","3","4","5"),
             grid.min = 1, grid.mid = 3, grid.max =5)

# 生成说明文本
desc <- textGrob("*图1:XX维度雷达图*
指标1:表现优秀,得分4.2
指标3:待提升,得分1.8
整体水平:中等", just = "left", x = 0)

# 左右拼接
p + desc + plot_layout(ncol = 2, widths = c(1,1))
如果需要生成多组,只需将每组的`p+desc`用`+`拼接,指定`nrow=5`即可实现单页最多5组的需求,超出部分会自动分页。

---
内容的提问来源于stack exchange,提问作者conr
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:04