2013-02-04 6 views
12

Ho usato knitr con la grafica di base R e l'output tikz per un po 'di tempo e volevo provare lo ggplot2. Tuttavia, questo esempio minimo non riesce a produrre alcun output con knitr 1.0.5:La scala di colori continua di ggplot2 è incompatibile con tikzDevice di knitr?

\documentclass{article} 
\begin{document} 
<<dev = 'tikz'>>= 
library(ggplot2) 
d = data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)) 
ggplot(d, aes(a, b, color = c)) + geom_point() 
@ 
\end{document} 

Invece, si riesce con il messaggio Error in UseMethod("depth"): no applicable method for 'depth' applied to an object of class "NULL". Eseguendo il codice in R o scegliendo il dispositivo png si otterrà il grafico previsto. L'omissione dell'estetica del colore o del factoring c funziona anche con tikzDevice, quindi la scala di colori continua sembra essere il problema.

C'è qualcosa che sto sbagliando, o è un bug?

+3

suona come un errore di 'tikzDevice'; dato che non è attivamente mantenuto ora, ti suggerisco di utilizzare altri dispositivi per questo caso specifico. –

+0

che peccato, dato che mi piace davvero avere le mie etichette degli assi composte da TeX. Forse darò un'occhiata a tikzDevice quando ci arrivo. – Taral

+0

@Yihui Sono appena incappato nello stesso bug. Qualche raccomandazione su quale dispositivo usare? – RoyalTS

risposta

6

Posso ottenere 10 per lavorare con il codice aggiungendo dev.off() alla fine del blocco di codice. Ad esempio:

cat(" 
    \\documentclass{article} 
    \\begin{document} 
    <<dev = 'tikz'>>= 
    library(ggplot2) 
    d = data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)) 
    ggplot(d, aes(a, b, color = c)) + geom_point() 
    dev.off() 
    @ 
    \\end{document} 
", "test_works.Rtex") 
knit("test_works.Rtex") 

funziona correttamente.

Ho anche notato che se chiamare knit() attraverso una sessione di R attiva sul codice (originale), mi sono lasciato con un dispositivo tikz attiva ...

cat(" 
    \\documentclass{article} 
    \\begin{document} 
    <<dev = 'tikz'>>= 
    library(ggplot2) 
    d = data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)) 
    ggplot(d, aes(a, b, color = c)) + geom_point() 
    @ 
    \\end{document} 
    ", file = "test_fails.Rtex") 
knit("test_fails.Rtex") 
dev.list() 
+0

grazie, mi hai appena salvato! come mai l'hai capito? qualche idea del perché/cosa succede? – fabians

2

Questo è stato un bug, ora risolto in la versione di sviluppo 0.10 di tikzDevice, che colpirà presto CRAN. Fino ad allora, installare utilizzando

devtools::install_github("yihui/tikzDevice")