如何使用knitr在代码块内的子图之间插入分页符

2023-12-14

我有以下 R arkdown 代码:

---
output:
  pdf_document: default
  keep_tex: yes
header-includes: 
  - \usepackage{subfig}
---


```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = F)
library(ggplot2)
library(knitr)
```
## Including Plots

You can also embed plots, for example:
```{r pressure, echo=FALSE, fig.width = 20, fig.height=10, fig.cap=LETTERS[1:3], fig.subcap=LETTERS[1:5], fig.ncol=2,  out.width='0.4\\linewidth'}
for (x in 1:3) {
  df <- data.frame(a = runif(50))
  p <- ggplot(df, aes(x=a)) + geom_histogram(bins=10)
  print(p)
  df <- data.frame(a = runif(50))
  p <- ggplot(df, aes(x=a)) + geom_histogram(bins=10)
  print(p)
  df <- data.frame(a = runif(50))
  p <- ggplot(df, aes(x=a)) + geom_histogram(bins=10)
  print(p)
  df <- data.frame(a = runif(50))
  p <- ggplot(df, aes(x=a)) + geom_histogram(bins=10)
  print(p)
  df <- data.frame(a = runif(50))
  p <- ggplot(df, aes(x=a)) + geom_histogram(bins=10)
  print(p)
  cat('\n\\pagebreak\n')
}

我想要三个不同的图形,每个图形包含五个子图形。我尝试在第五个子图处打破这个数字,但它不起作用。


fig.cap被设计为采用单个参数,因此我们必须以编程方式为您想要的三个图中的每个图生成新的代码块。作为在这里解释,我们可以使用knit_expand功能。我修改了提供的示例以包含子图标题以及从列表中打印绘图的方法。

我已经写了函数splitSubFig这将限制每个图的子图数量。如果我们检查这个数字,它将创建一个新页面。请注意,您将需要使用results="asis"在块头中创建数字:

---
output:
  pdf_document: default
header-includes: 
  - \usepackage{subfig}
---


```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = F)

library(ggplot2)
library(knitr)

# Function to create a separate chunk to generate a plot for each item in list
splitSubFig <- function(plots, caption, maxlength) {

  knitr::opts_knit$set(progress = FALSE, verbose = FALSE)

  n <- length(plots)
  numPages <- ceiling(n / maxlength)
  splitPlots <- split(plots, rep(1:ceiling(n/maxlength), each=maxlength)[1:n])

  for (page in 1:numPages) {

    cat(
      knit(text=knit_expand(
        text=(
          "```{r {{caption}}{{page}}, fig.cap='{{caption}}: {{page}}', fig.subcap=LETTERS[1:length(splitPlots[page])],  out.width='8cm', fig.ncol=2, echo = FALSE, message = FALSE}
for(i in splitPlots[page]){

for(plots in i){
 print(plots)
}

}
```"),
caption = caption,
page = LETTERS[page])))
  }
}

```

```{r, results="asis"}

plots <- list(ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10, fill = "red"),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10, fill = "blue"),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
             ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10))

splitSubFig(plots, caption = "Your Caption", maxlength = 6)
```

enter image description here

这个功能当然可以改进,但它应该适合您的需要!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用knitr在代码块内的子图之间插入分页符 的相关文章

  • R Shiny:如何将无功值从闪亮模块返回到主服务器功能?

    我有一个简单的玩具示例 它使用 add removeBtn 模块在 第一个 模块中添加和删除 UI 我需要跟踪单击 添加 删除 的次数 如果我不使用模块 这很容易 但我试图在嵌套模块的上下文中执行此操作 代码如下 但基本上 我似乎无法访问主
  • 更新 R6 对象实例中的方法定义

    如何更新 R6 类实例的方法定义 正如我所期望的 S3 使用当前的方法定义 对于 R5 参考类 我可以使用 myInstance myInstance copy 在 R6 中 我尝试了 myInstance myInstance clone
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • R Shinydashboard 自定义 CSS 到 valueBox

    我一直在尝试将 valueBox 的颜色更改为自定义颜色 超出 validColors 中可用的颜色 但一直无法这样做 我知道有一种方法可以使用标签来包含自定义 CSS 但是我无法将它们放在正确的位置 ui lt dashboardPage
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • ggplot:如何限制条形图中的输出,以便仅显示最频繁出现的情况?

    我几个小时以来一直在寻找这个简单的东西 但没有结果 我有一个数据框 其中一列为变量 国家 地区 我想要两件事以下 绘制最常见的国家 地区 最常见的位于顶部 找到部分解决方案EDIT找到完整的解决方案 gt gt 重点问题是根据频率限制条形图
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • 平滑连续 2D 点

    UPDATE 感谢 user20650和 李哲源Zheyuan Li 这是我想出的解决方案 Example data set df 3600 observations points Create a vector of the cumula
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http
  • 如何在Rstudio中快速给几个单词加上引号?

    如何将 MI ID FL 转换为 MI ID FL 而无需键入每个双引号 Hmisc 包有一个函数 Cs 它将评估逗号分隔的文本是否带有引号 Cs MI ID FL becomes MI ID FL
  • R 中 SVG 图形的最佳设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想从 R 导出 SVG 图形 似乎有两种选择 RSvgDevice 和 Cairo 有人可以对这些包发表评论吗 是默认的还是明显比另一个
  • R - 基于列名称的子集

    我的数据框有超过 120 列 变量 我想根据列名称创建子集 例如 我想创建一个子集 其中列名称包含字符串 心情 这可能吗 我一般用 SubData lt myData grep whatIWant colnames myData 我很清楚
  • 更改 R 中 ggplot geom_polygon 的颜色方案

    我正在使用地图库和 ggplot 的 geom polygon 创建地图 我只是想将默认的蓝色 红色 紫色配色方案更改为其他颜色 我对 ggplot 非常陌生 所以如果我没有使用正确的数据类型 请原谅 我使用的数据如下所示 gt head
  • 获取包含矩阵行内最大值的列名称,该矩阵在数组内包含单独的最大值

    例如给出 dim1 lt c P PO C T dim2 lt c LL RR R Y dim3 lt c Jerry1 Jerry2 Jerry3 Q lt array 1 48 c 4 4 3 dimnames list dim1 di
  • 条件和分组 mutate dplyr

    假设我有以下每个抽屉库存增加的数据 gt socks year drawer nbr sock total 1990 1 2 1991 1 2 1990 2 3 1991 2 4 1990 3 2 1991 3 1 我想要一个二进制变量来标
  • 安装 2.15 后 ggplot2 中的 alpha 通道不起作用

    更新到 R 2 15 后 ggplot 中的 alpha 通道似乎不再起作用 plot rnorm 100 rnorm 100 bg cc000055 pch 21 工作得很好但是 qplot rnorm 100 rnorm 100 col
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x

随机推荐

  • 如何使用 MUnit 在 Mule Flow 中模拟 Java 组件

    我正在尝试使用 MUnit 对我的一个子流程进行单元测试 我需要模拟一个自定义 Java 组件 但我无法这样做 我的子流程如下
  • 飞碟没有应用内部 CSS

    我在 struts2 操作中使用以下代码 使用飞碟将 HTML 转换为 PDF 它只是按原样打印样式代码 并不应用它 static String readFile String path Charset encoding throws IO
  • 使用本地文件中的背景图像进行绘图布局

    我有同样的问题 如所述这个问题 我希望我的绘图具有本地 png 文件的背景 Using 情节的例子 它使用来自网络的图像 有效 使用本地图像的路径 无论有或没有绝对路径 都不起作用 根据另一个问题的答案进行编码没有帮助 import bas
  • 如何在Canvas中专门绘制Shape

    我里面有一个形状Canvas 像这样
  • Safari 中如何允许跨域请求?

    我有从 localhost 运行的 webapp 因为调试 并且它发出跨域 AJAX 请求 我可以轻松地为 Chrome 设置标志 disable web security 并且 web 应用程序在 Chrome 中按预期工作 但我也需要为
  • MvvmCross - 从视图模型调用 Web 服务

    我是 MvvmCross 和 Android 开发的新手 我需要在视图模型中调用 POST 数据到 JSON Web 服务 然后 我需要在 UI 中显示 Web 服务的结果 我的视图模型的要点如下所示 public class MyView
  • 将网站的 URL 格式化为字符串,并在前面添加 http://

    我有一个评论系统 允许自动链接网址 我正在使用 cakephp 但解决方案更多的是 PHP 这就是正在发生的事情 如果用户输入完全限定的网址http or https 一切安好 但如果他们进入www scoobydoobydoo com它变
  • RequireJS:将路径设置为“忽略”

    我正在使用一个第三方库 通过 Bower 它声明了我不想要的依赖项 它只是样式 是否可以将该依赖项设置为 忽略 或某些此类值 e g define jquery dep i dont want function 在需要配置中 paths j
  • 多重继承 C++ 当基类共享相同的方法名称时,是否有一些限制?

    我以前从未在 C 中使用过多重继承 但我很好奇 因为我在一本书中看到了编织 bst 的实现 通过基类 List 和基类 BinarySearch 树的多重继承 现在我试图编一些愚蠢的例子来理解它是如何工作的 所以我想出了这个 class B
  • 如何在 PHP 中创建幻方?

    我想尝试用 PHP 创建一个魔方 即所有加起来等于相同值的数字网格 但我真的不知道从哪里开始 我知道创建幻方的许多方法 例如在固定位置开始 1 然后每次迭代都朝特定方向移动 但这并没有创建一个真正随机的魔方 而这正是我的目标 我希望能够生成
  • Java:在运行时检查类是否存在[重复]

    这个问题在这里已经有答案了 我正在开发一个依赖于第三方库的软件 由于许可协议 该库无法与软件一起提供 并且用户在启动程序时必须在本地拥有该库 有没有办法检查这个特定的库是否存在于类路径中并且可以加载 如果没有 我想提供一个对话框以允许用户指
  • 如何在 SQL Server 2008 中删除重复行?

    如何删除 SQL Server 2008 中的重复行 最简单的方法是使用 CTE 公用表表达式 当我有原始数据要导入时 我会使用这种方法 我清理它的第一件事是确保没有重复 我对每一行都有某种唯一的句柄 Summary WITH number
  • 如何将多个提交合并到另一个分支作为单个压缩提交?

    我有一个远程 Git 服务器 这是我想要执行的场景 对于每个错误 功能 我创建一个不同的 Git 分支 我继续使用非官方 Git 消息在该 Git 分支中提交代码 在顶级存储库中 我们必须使用官方 Git 消息针对一个错误进行一次提交 那么
  • 为什么 try except 块在 python 3.7 的 Visual Studio 代码中不起作用?

    实现 try except 块时 VS Code 无法识别指定的异常或与此相关的任何异常 前任 try x 1 0 except ZeroDivisionError print You cannot divide by zero 通过终端执
  • 从 contenteditable 填充并保存文本

    我正要开始写自己的富文本编辑器但需要知道是否可以填充文本区域以及如何保存 使用其中的数据 我目前正在使用 CKEditor 但它对于我想要的东西来说太笨重和太大 我将以此为基础 http jsfiddle net Kxmaf 6 我还需要对
  • 如何在自定义验证规则的 pass 函数中发送多个参数

    我正在实现一个自定义验证规则 该规则应该在自定义验证规则的传递函数中采用另一个带有属性和值的参数 当我们在编写自定义验证时实现 Rule 接口时 它不允许我们在 pass 函数中添加第三个参数 但我需要第三个参数 此外 如果有人能够指导我在
  • PLS-00428:此 SELECT 语句中需要 INTO 子句

    我想将 Rownum 存储为变量 而不是使用昂贵的 Join 我需要从 Select 语句中获取此值 因为 Rownum 在不同环境中会有所不同 因此它不能是代码中的文字字符串 对于上下文 此查询在 Oracle Siebel CRM 模式
  • 为什么 不起作用?

    我使用JSF 2 0 hibernate validator4 2 jarvalidation api jar tomcat和Eclipse I put Size min 3 message xxx ManagedBean 中的注释和
  • 构造类对象后执行代码

    我希望通过让每个子类在父类保存的列表中注册自己来创建给定类的所有子类的列表 即如下所示 class Monster object monsters list class Lochness Monster Monster monsters a
  • 如何使用knitr在代码块内的子图之间插入分页符

    我有以下 R arkdown 代码 output pdf document default keep tex yes header includes usepackage subfig r setup include FALSE knitr