2010-07-21 8 views
13

Ich versuche einen Bericht zu erstellen, der einige Grafiken enthält, die mit ggplot2 erstellt wurden. Obwohl ich für einige Umwelt auf lange Sicht suchen - ich nur eine einfache .Rnw Datei hier verwenden, die nur den Code enthält, und die Handlungsweave und ggplot2: überhaupt keine PDFs erzeugt

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

Leider ist die Grafik nicht erstellt, bekomme ich nur eine beschädigte .pdf und .eps-Datei. Obwohl ich eine nette .tex-Datei bekomme, die außer für die Grafik anscheinend funktioniert. Ich verwende den folgenden grundlegenden Code, um es zu schaffen:

Sweave("myfile.Rnw") 

Ich habe gerade etwas älteren Beitrag im Web, die Probleme mit der Transparenz und Sweave/ggplot2 aber nichts besprachen, die dazu beigetragen haben könnten. Ich habe auch das entspannte Paket ausprobiert, was auch nicht geholfen hat. Übrigens, gibt es Neuigkeiten zu Decumar?

+1

Decumar wurde in den letzten Tagen stark entwickelt und könnte sich tatsächlich einem Punkt nähern, an dem es veröffentlicht werden kann. – hadley

+0

Yay! Das macht meinen Tag. Ich freue mich wirklich darauf, es zu testen! –

Antwort

19

qplot() erzeugt Objekte, keine grafische Ausgabe. Es könnte so aussehen, als wenn Sie es ausführen, aber das ist, weil R ohne Zuweisung automatisch die Ausgabe von qplot() druckt. Um es in Swave zu integrieren, wickeln Sie entweder print() um qplot(), oder weisen Sie die Ausgabe von qplot() etwas zu, dann wickeln Sie das in print().

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

Das sollte funktionieren. Ich benutze die ggplot2 Grafiken in meiner Sweave Docs die ganze Zeit.

+0

thx Mann. der Start ist immer der schwierigste ... Ich habe es nie so gedacht, weil ich danach nur qplot() und gsave benutzt habe. –

3

Sie müssen es um print() wickeln, um es in Sweave arbeiten zu lassen.

1

Eigentlich, während beide vorherigen Antworten korrekt sind, ist Ihr Problem etwas anderes.

Sie müssen sicherstellen, dass der gesamte Codeblock auf der linken Seite der Seite ist (abgesehen von der Funktion iundentation). Auch hier habe ich keine Ahnung warum, aber das verursacht Probleme für Sweave.

Nachdem sichergestellt wurde, dass der gesamte Code (und Header/Footer für Code Chunk) auf der linken Seite der Seite waren (und eine print-Anweisung hinzufügen), dann funktioniert Ihr Beispiel für mich.

Übrigens habe ich heute gelernt, dass Sie eine Umgebung um Ihren Code in Swave-Dokumenten erstellen können (was mir nicht bewusst war und mir viel Zeit ersparen wird). Ein guter alter Stackoverflow, der dir etwas Neues beibringt, auch wenn du eine Frage beantwortest!

Hoffe, das hilft.