2010-07-21 7 views
13

Sto provando a creare un report di sweave che contiene alcuni elementi grafici eseguiti con ggplot2. Anche se io sono alla ricerca di qualche ambiente per il lungo termine - mi basta usare un file .Rnw semplice qui che solo contiene il codice e la tramasweave e ggplot2: nessun PDF generato a tutti

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

Purtroppo il grafico non viene creato, ho solo un .pdf danneggiato e il file .eps. Anche se ottengo un bel file .tex che sembra funzionare tranne la grafica. Io uso il seguente codice di base per crearla:

Sweave("myfile.Rnw") 

ho appena trovato un po 'più vecchio post sul web che sono state discutendo problemi con la trasparenza e la sweave/ggplot2 ma niente che avrebbe potuto aiutare. Ho anche provato il pacchetto rilassato, che non ha aiutato neanche. A proposito, ci sono novità sul pacchetto decumar?

+1

Decumar è in fase di sviluppo da un paio di giorni e potrebbe essere vicino a un punto in cui può essere rilasciato. – hadley

+0

Yay! Questo rende la mia giornata. Non vedo davvero l'ora di provarlo! –

risposta

19

qplot() produce oggetti, non un'uscita grafica. Potrebbe sembrare che lo faccia quando lo esegui, ma è perché senza assegnazione, R stampa automaticamente l'output di qplot(). Per integrarlo in Sweave, o avvolgere print() intorno a qplot() o assegnare l'output di qplot() a qualcosa, quindi avvolgere quello in print().

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

Che dovrebbe funzionare. Io uso sempre la grafica ggplot2 nei miei documenti sweave.

+0

thx man. l'inizio è sempre il più difficile ... Non ci ho mai pensato in questo modo perché ho usato qplot() e ggsave in seguito. –

3

Si deve avvolgere intorno a print() per farlo funzionare in sweave.

1

In realtà, mentre entrambe le risposte precedenti sono corrette, il tuo problema è un'altra cosa.

È necessario assicurarsi che l'intero blocco di codice si trovi alla sinistra della pagina (a parte l'iundentation nelle funzioni). Di nuovo, non ho idea del perché, ma questo causa problemi a Sweave.

Dopo essersi assicurati che tutto il codice (e l'intestazione/piè di pagina per il pezzo di codice) si trovavano alla sinistra della pagina (e aggiungendo un'istruzione di stampa), l'esempio funziona per me.

Per inciso, ho imparato oggi che è possibile creare un ambiente intorno al codice in documenti sweave (di cui non ero a conoscenza, e mi farà risparmiare molto tempo). Buon vecchio stackoverflow, che ti insegna qualcosa di nuovo anche quando rispondi a una domanda!

Spero che questo aiuti.