2010-07-21 19 views
13

Estoy intentando crear un informe sweave que contenga algunos gráficos hechos con ggplot2. Aunque estoy en busca de algún ambiente en el largo plazo - sólo tiene que utilizar un archivo .Rnw simple aquí que sólo contiene el código y la tramasweave y ggplot2: no se generaron pdfs

\documentclass[a4paper]{article} 
\SweaveOpts{echo=FALSE} 
\usepackage{a4wide} 

    \begin{document} 

    \begin{figure}[htbp] 
    \begin{center} 
<<>>= 
library(ggplot2) 
x=rnorm(100) 
qplot(x) 

@ 
\caption{My Graph} 
\end{center} 
    \end{figure} 
\end{document} 

Por desgracia el gráfico no se crea, solo me dan un .pdf dañado y archivo .eps. Aunque obtengo un buen archivo .tex que parece funcionar a excepción de los gráficos. uso el siguiente código básico para crearlo:

Sweave("myfile.Rnw") 

me acaba de encontrar algún puesto más viejo en la web que estaban discutiendo problemas con la transparencia y la Sweave/ggplot2 pero nada que podrían haber ayudado. También probé el paquete relajado, que tampoco ayudó. Por cierto, ¿hay alguna noticia sobre el paquete decumar?

+1

Decumar ha estado bajo un gran desarrollo durante los últimos días, y en realidad puede estar llegando a un punto en el que se puede liberar. – hadley

+0

¡Yay! Eso hace que mi día. ¡Estoy ansioso por probarlo! –

Respuesta

19

qplot() produce objetos, no una salida de gráficos. Puede parecer como cuando lo ejecuta, pero eso es porque sin asignación, R imprime automáticamente la salida de qplot(). Para integrarlo en Sweave, envuelva print() alrededor de qplot(), o asigne la salida de qplot() a algo, luego ajuste eso en print().

... 
<<fig = T, echo = F>>= 
library(ggplot2) 
x=rnorm(100) 
p <- qplot(x) 
print(p) 
@ 
... 

Eso debería funcionar. Utilizo gráficos ggplot2 en mis documentos de sweave todo el tiempo.

+0

thx hombre. el comienzo es siempre el más difícil ... Nunca pensé en eso de esa manera porque acabo de usar qplot() y ggsave después. –

3

Tienes que envolverlo alrededor de print() para que funcione en sweave.

1

En realidad, si bien las dos respuestas anteriores son correctas, su problema es otra cosa.

Debe asegurarse de que todo el bloque de código se encuentre a la izquierda de la página (aparte de iundentation en las funciones). De nuevo, no tengo idea de por qué pero esto causa problemas para Sweave.

Después de asegurarse de que todos los códigos (y encabezado/pie de página para el fragmento de código) estaban a la izquierda de la página (y agregando una declaración de impresión), entonces su ejemplo funciona para mí.

Por cierto, hoy aprendí que puede crear un entorno alrededor de su código en documentos sweave (que no conocía, y que me ahorraría mucho tiempo). ¡Buen stackoverflow antiguo, enseñándote algo nuevo incluso cuando respondes una pregunta!

Espero que esto ayude.

Cuestiones relacionadas