Sweave 生成​​的 pdf 图有两页,而不是一页,第一页是空的

Sweave 生成​​的 pdf 图有两页,而不是一页,第一页是空的

在 RI 中使用,Sweave()我尝试将R 包ggplot2生成的图形包含到 pdf 文档中。marrangeGrob()gridExtra

出现的问题是,包含 tex-document out of 包含的图形的 pdfSweave()有两页,第一页是空的。该图仅出现在第二页。因此,该图形不会出现在 tex-file out of 生成的 pdf 中Sweave()

以下是说明该问题的 Rnw 文件的内容:

\documentclass[a4paper]{article}

\title{My first plot}
\author{}

\begin{document}

<<fig=TRUE, width=7, height=7>>=
set.seed(1234)
data <- data.frame(x=factor(sample(c("yes", "no"), replace=TRUE, size=150)),
y=rnorm(150), z=factor(sample(c("a1", "a2"), replace=TRUE, size=150)))

library("ggplot2")
p1 <- ggplot(data=data, aes(x=x, y=y)) + geom_boxplot() + coord_flip() + ylab("y")
p2 <- ggplot(data=data, aes(x=z, fill=x)) + 
geom_bar(position="dodge") + xlab("a1 or a2") +
theme(legend.position=c(0.8,0.8))

library("gridExtra")
grobframe <- marrangeGrob(list(p1, p2), ncol=2, nrow=1, top=NULL)

grobframe
@

\end{document}

如何防止包含图形的 pdf 有两页,其中第一页是空的,以便使图表显示在最终文档中?

答案1

从 Sweave 转换为 knitr 时,存在一些语法差异。如果您在文件中运行 Sweave 代码块,*.Rnw则可以。

  1. 打开 R
  2. *.Rnw将目录更改为文件的位置
  3. knitr使用库('knitr')加载包
  4. 现在运行命令Sweave2knitr("*.Rnw")
  5. 这将创建一个名为的文件*-knitr.Rnw,现在具有正确的 knitr 命令。

对于这个问题,*-knitr.Rnw 文件是:

\documentclass[a4paper]{article}

\title{My first plot}
\author{}

\begin{document}

<<width='7in', height='7in'>>=
set.seed(1234)
data <- data.frame(x=factor(sample(c("yes", "no"), replace=TRUE, size=150)),
y=rnorm(150), z=factor(sample(c("a1", "a2"), replace=TRUE, size=150)))

library("ggplot2")
p1 <- ggplot(data=data, aes(x=x, y=y)) + geom_boxplot() + coord_flip() + ylab("y")
p2 <- ggplot(data=data, aes(x=z, fill=x)) + 
geom_bar(position="dodge") + xlab("a1 or a2") +
theme(legend.position=c(0.8,0.8))

library("gridExtra")
grobframe <- marrangeGrob(list(p1, p2), ncol=2, nrow=1, top=NULL)

grobframe
@

\end{document}

无论是使用 R 控制台还是在我的情况下使用 TeXmaker 中的定制用户命令,您都需要首先运行knit上述文件,从而生成一个*.tex文件。

现在您只需进行常规的 LaTeX 编译即可。

要记住的非常重要的一点是,只编辑 *.Rnw 文件,并且必须在新的 LaTeX 编译之前重新编织它。

上述代码的输出是: 在此处输入图片描述

相关内容