在 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
则可以。
- 打开 R
*.Rnw
将目录更改为文件的位置knitr
使用库('knitr')加载包- 现在运行命令
Sweave2knitr("*.Rnw")
- 这将创建一个名为的文件
*-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 编译之前重新编织它。