2012-12-28 21 views
14

In passato, ho utilizzato RStudio per creare ggplot2 e quindi esportato come PDF da RSudio. Questo funziona in modo fantastico.Incorporamento dell'uscita ggplot2 in PDF LaTeX utilizzando knitr e RStudio

Ora sto cercando di automatizzare l'utilizzo di knitr, ma non riesco a capire dove impostare l'altezza e il peso del grafico per creare un output di alta qualità.

Ecco il mio tentativo corrente, ma i grafici "fianco a fianco" non lo sono, il grafico del paesaggio ruotato non lo è e la risoluzione sembra bassa.

Gradirei qualche consiglio. Sembra che sia ggplot2 che knitr siano in fase di sviluppo attivo, il che è ottimo, tuttavia la ricerca su Internet ha portato la mia sorte. LaTeX è nuovo per me. Apprezzerei anche le strategie generali del flusso di lavoro per questo insieme di strumenti. Grazie in anticipo.

\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} 

risposta

9

mi si può ottenere la maggior parte del tragitto:

\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} 

La qualità sembra bene a me, ma solo se uso il mio visualizzatore di sistema PDF (Anteprima, OS X). Il visualizzatore PDF RStudio incorporato ha avuto alcuni problemi di rendering per me in passato, quindi non lo uso.

Non sono sicuro di come forzare la figura nella pagina orizzontale ad essere al di sotto del testo. Tipicamente, lo farei con il pacchetto float come con le figure precedenti, ma non sembra funzionare in orizzontale. Consiglierei di consultare la gente su tex.stackexchange.com su quello, dal momento che è abbastanza specifico per LaTeX.

Non l'interazione tra fig.width, fig.height e out.width. Gioca con entrambi e guarda cosa succede alla dimensione dell'immagine rispetto al ridimensionamento degli elementi all'interno dell'immagine. Uno influenza le dimensioni effettive delle figure quando viene creato e l'altro influenza il modo in cui l'immagine viene ridimensionata quando è inclusa nel documento LaTeX (credo).

Si noti inoltre che ho utilizzato lo \caption{} nell'ambiente di figura per gli affiancati, poiché altrimenti tenterà di creare una didascalia per ogni figura.

6

Non sono sicuro circa la quarta pagina ruotata, ma ottenere le trame side-by-side richiede fig.show='hold' e 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) 
@ 
Problemi correlati