Подтвердить что ты не робот

Встраивание вывода ggplot2 в LaTeX pdf с использованием knitr и RStudio

В прошлом я использовал RStudio для создания ggplot2, а затем экспортировал их как PDF файлы из RSudio. Это работает фантастически.

Теперь я пытаюсь автоматизировать использование 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}
4b9b3361

Ответ 1

Я могу получить от вас большую часть пути:

\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 (Preview, OS X). У встроенного в RStudio PDF-программы для просмотра в прошлом были некоторые проблемы с обработкой, поэтому я не использую его.

Я не уверен, как заставить фигуру на странице ландшафта быть ниже текста. Как правило, я делаю это с пакетом float, как и с предыдущими цифрами, но, похоже, он не работает в ландшафте. Я бы посоветовал вам проконсультироваться с людьми на tex.stackexchange.com на этом, поскольку он достаточно специфичен для LaTeX.

Не взаимодействие между fig.width, fig.height и out.width. Играйте с обоими и посмотрите, что происходит с размером изображения и масштабированием элементов внутри изображения. Один влияет на фактический размер фигуры при ее создании, а другой влияет на масштабирование этого изображения, когда он включен в документ LaTeX (я думаю).

Также обратите внимание, что я использовал \caption{} в среде рисунков для бок о бок, так как в противном случае он попытается создать подпись для каждой фигуры.

Ответ 2

Не уверен в поворотной четвертой странице, но для получения бок о бок графиков требуется 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)
@