Ho iniziato a utilizzare Sweave qualche tempo fa. Tuttavia, come la maggior parte delle persone, ho riscontrato abbastanza presto un problema importante: la velocità. La scansione di un documento di grandi dimensioni richiede anni di lavoro, il che rende il lavoro efficiente piuttosto impegnativo. L'elaborazione dei dati può essere accelerata molto con cacheSweave. Tuttavia, i grafici, in particolare ggplot;) richiedono ancora troppo tempo per essere visualizzati. Questo è il modo in cui voglio usare pgfSweave.Problemi con ggplot e pgfSweave
Dopo molte, molte ore, sono finalmente riuscito a impostare un sistema funzionante con Eclipse/StatET/Texlipse. Poi ho voluto convertire un rapporto esistente da usare con pgfSweave e ho avuto una brutta sorpresa: la maggior parte dei miei ggplot non sembra funzionare più. La trama segue per esempio, funziona perfettamente nella console e Sweave:
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Esecuzione con pgfSweave, tuttavia, ottengo questo errore:
Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) :
Error in if (width > 0) { : missing value where TRUE/FALSE needed
Quando rimuovo AES (...) da geom_point , la trama funziona perfettamente con pgfSweave.
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
Edit: ho studiato più nel problema e potrebbe ridurre il problema al tikz-dispositivo.
Questo funziona bene:
quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Questo dà l'errore precedente:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()
Questo funziona bene così:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()
potrei ripetere questo con 5 differenti ggplots. Quando non si utilizza il colore (o dimensione, alpha, ...) nella mappatura, funziona con tikz.
Q1: Qualcuno ha qualche spiegazione per questo comportamento?
Inoltre, il caching di blocchi di codice non di trama non funziona molto bene. Il seguente codice pezzo non richiede assolutamente tempo con Sweave. Con pgfSweave, ci vogliono circa 10 secondi.
<<plot.opts,echo=FALSE,results=hide,cache=TRUE>>=
#colour and plot options are globally set
pal1 <- brewer.pal(8,"Set1")
pal_seq <- brewer.pal(8,"YlOrRd")
pal_seq <- c("steelblue1","tomato2")
opt1 <- opts(panel.grid.major = theme_line(colour = "white"),panel.grid.minor = theme_line(colour = "white"))
sca_fill_cont_opt <- scale_fill_continuous(low="steelblue1", high="tomato2")
ory <- geom_hline(yintercept=0,alpha=0.4,linetype=2)
orx <- geom_vline(xintercept=0,alpha=0.4,linetype=2)
ts1 <- 2.3
ts2 <- 2.5
ts3 <- 2.8
ps1 <- 6
offset_x <- function(x,y) 0.15*x/pmax(abs(x),abs(y))
offset_y <- function(x,y) 0.05*y/pmax(abs(x),abs(y))
plot_size <- 50*50
questo sembra un comportamento molto strano, così, come solo alcune variabili sono impostate per un uso successivo.
Q2: Qualcuno ha qualche spiegazione per questo?
Q3: Più in generale, vorrei chiedere se qualcuno sta usando pgfSweave con successo? Con successo intendo dire che tutte le cose che funzionano in Sweave funzionano anche in pgfSweave, con l'ulteriore vantaggio di font carini e velocità migliorata. ;)
Grazie mille per le risposte!
Non uso il sweave quindi non posso commentare ma posso commentare che ggplot è lento, questo è un problema noto durante la stampa di dati con> 1000 punti (a volte meno). Se stai cercando un grafico "più veloce" prova Lattice o Base Graphics. Comunque non saranno così graziosi fuori dagli schemi. –
... e normalmente, la velocità non è tanto un problema durante la stampa. A meno che tu non voglia usare Sweave ...;) – donodarazao
Ciao donodarazo, sono uno degli autori del tikzDevice. Proverò a riprodurre i tuoi problemi ggplot per vedere se c'è una soluzione. Se fosse possibile salvare 'elevazione',' area' e 'que_id' in un file RData e inviare un collegamento per il download all'indirizzo di posta elettronica elencato nella voce del pacchetto su CRAN, sarebbe di aiuto. Inoltrerò anche questa domanda a Cameron --- potrebbe avere qualche idea riguardante i problemi pgfSweave. – Sharpie