使用knitr和RStudio将ggplot2输出嵌入到LaTeX pdf中

时间:2012-12-28 19:35:02

标签: r latex ggplot2 knitr rstudio

过去,我使用RStudio创建ggplot2,然后将其从RSudio中导出为PDF。这很有效。

我现在正在尝试使用knitr进行自动化,但我无法确定在何处设置图形高度和重量以创建高质量的输出。

这是我目前的尝试,但"并排"图形不是,旋转的风景图不是,分辨率似乎很低。

我很感激任何建议。似乎ggplot2和knitr都在积极开发中,这很好,但是,互联网搜索已经引领我的步伐。 LaTeX对我来说是新的。我也很欣赏这套工具的任何一般工作流程策略。提前谢谢。

\documentclass[letterpaper]{article}
\usepackage{lscape}
\begin{document}
<<load, echo=FALSE, results='hide', warning=FALSE, message=FALSE>>=
require(ggplot2)
@ 

Two on the first page.
<<first, echo=FALSE, fig.height=3, fig.cap="This is first", fig.pos='h'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@

Blah, blah, blah.
<<second, echo=FALSE, fig.height=3, fig.cap="This is second", fig.pos='h'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@
\newpage
Second page.

Side by side images:

<<third, echo = FALSE, out.width="2in", fig.cap='Side by side'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@
\newpage
\begin{landscape}
This page is rotated
<<fourth, echo = FALSE, out.width="4in", fig.cap='Landscape'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@
\end{landscape}
\end{document}

2 个答案:

答案 0 :(得分:9)

我可以在那里找到你的大部分地方:

\documentclass[letterpaper]{article}
\usepackage{lscape}
\usepackage{float}
\begin{document}
<<load, echo=FALSE, results='hide', warning=FALSE, message=FALSE>>=
require(ggplot2)
@ 

Two on the first page.
<<first, echo=FALSE, fig.height=3, fig.cap="This is first", fig.pos='h'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@

Blah, blah, blah.
<<second, echo=FALSE, fig.height=3, fig.cap="This is second", fig.pos='h'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@

\newpage
Second page.

Side by side images:

\begin{figure}[H]
<<third, echo = FALSE, out.width="0.48\\linewidth",fig.width = 3.5,fig.height=2>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@
\caption{Side by side}
\end{figure}

\newpage
\begin{landscape}
This page is rotated.
<<fourth, echo = FALSE, fig.width = 4,fig.height = 3,out.width = "0.9\\linewidth">>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@
\end{landscape}
\end{document}

质量看起来很好,但只有我使用我的系统PDF查看器(预览,OS X)。内置的RStudio PDF查看器过去曾经有过一些渲染问题,所以我不使用它。

我不确定如何强制横向页面上的数字低于文本。通常情况下,我会像以前的数字一样使用float包,但它似乎不适用于横向。我建议您在tex.stackexchange.com上咨询那个人,因为它特别适合LaTeX。

不是fig.widthfig.heightout.width之间的相互作用。与两者一起玩,看看图像大小与图像中元素的缩放比例会发生什么变化。一个影响创建时的实际图形大小,另一个影响图像在LaTeX文档中包含时的缩放方式(我认为)。

另请注意,我在数字环境中使用\caption{}并排,因为否则会尝试为每个数字创建一个标题。

答案 1 :(得分:6)

不确定旋转的第四页,但获取并排图需要fig.show='hold'out.width='.45\\linewidth'

<<third, echo = FALSE, out.width="2in", fig.cap='Side by side',out.width='.45\\linewidth',fig.show='hold'>>=
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
ggplot(mtcars, aes(mpg, wt))+geom_point()+facet_grid(vs ~ am, margins=TRUE)
@