2010-07-21 5 views
13

J'essaye de créer un rapport sweave contenant des graphiques faits avec ggplot2. Bien que je suis à la recherche d'un certain environnement à long terme - je viens d'utiliser un simple fichier .Rnw ici qui contient uniquement le code et l'intriguesweave et ggplot2: aucun fichier pdfs généré

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

Malheureusement, le graphique ne se crée pas, je reçois seulement corrompu .pdf et le fichier .eps. Bien que je reçois un bon fichier .tex qui semble fonctionner, sauf pour les graphiques. J'utilise le code de base ci-dessous pour créer:

Sweave("myfile.Rnw") 

Je viens de découvrir un peu ancien poste sur le Web qui discutaient des problèmes avec la transparence et Sweave/ggplot2 mais rien qui aurait pu aider. J'ai aussi essayé le forfait décontracté, ce qui n'a pas aidé non plus. Btw, y a-t-il des nouvelles sur le paquet decumar?

+1

Decumar a été fortement développé ces deux derniers jours, et peut être proche d'un point où il peut être libéré. – hadley

+0

Yay! Cela fait ma journée. Je suis vraiment impatient de le tester! –

Répondre

19

qplot() produit des objets, pas une sortie graphique. Cela peut sembler le cas lorsque vous l'exécutez, mais c'est parce que, sans affectation, R imprime automatiquement la sortie de qplot(). Pour l'intégrer dans Sweave, enroulez print() autour de qplot() ou affectez la sortie de qplot() à quelque chose, puis enveloppez-la dans print().

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

Cela devrait fonctionner. J'utilise ggplot2 graphiques dans mes documents sweave tout le temps.

+0

homme thx. le début est toujours le plus dur ... Je n'y ai jamais pensé parce que j'ai juste utilisé qplot() et ggsave après. –

3

Vous devez l'enrouler autour de print() pour le faire fonctionner en sweave.

1

En fait, alors que les deux réponses précédentes sont correctes, votre problème est autre chose.

Vous devez vous assurer que tout le bloc de code se trouve à gauche de la page (à l'exception de l'iundentation dans les fonctions). Encore une fois, je ne sais pas pourquoi, mais cela cause des problèmes pour Sweave. Après avoir vérifié que tout le code (et l'en-tête/pied de page pour le bloc de code) se trouvait à gauche de la page (et en ajoutant une instruction print), alors votre exemple fonctionne pour moi. Incidemment, j'ai appris aujourd'hui que vous pouvez créer un environnement autour de votre code dans des documents sweave (que je ne connaissais pas, et qui me fera gagner beaucoup de temps). Bon vieux stackoverflow, vous apprendre quelque chose de nouveau même lorsque vous répondez à une question!

Espérons que cela aide.