que empecé a usar Sweave hace algún tiempo. Sin embargo, como la mayoría de las personas, muy pronto me encontré con un problema importante: la velocidad. Mojar un documento grande requiere años de funcionamiento, lo que hace que el trabajo eficiente sea todo un reto. El procesamiento de datos se puede acelerar mucho con cacheSweave. Sin embargo, las tramas, especialmente ggplot;) aún tardan demasiado en renderizarse. Así es como quiero usar pgfSweave.Problemas con ggplot y pgfSweave
Después de muchas, muchas horas, finalmente logré establecer un sistema en funcionamiento con Eclipse/StatET/Texlipse. Luego quise convertir un informe existente para utilizar con pgfSweave y tuve una sorpresa: la mayoría de mis ggplots ya no funcionan. El siguiente gráfico, por ejemplo, funciona perfectamente en la consola y Sweave:
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Correr con pgfSweave, sin embargo, me sale este error:
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
Cuando quito AES (...) de geom_point , la trama funciona perfectamente con pgfSweave.
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
Editar: que investigaron más en el problema y podría reducir el problema a la TikZ-dispositivo.
Esto funciona muy bien:
quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Esto da el error anterior:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()
Esto funciona muy bien, así:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()
pude repetir esto con 5 diferentes ggplots. Cuando no se usa color (o tamaño, alfa, ...) en la asignación, funciona con tikz.
Q1: ¿Alguien tiene alguna explicación para este comportamiento?
Además, el almacenamiento en caché de fragmentos de código que no son de trama no funciona muy bien. El siguiente fragmento de código no lleva mucho tiempo con Sweave. Con pgfSweave, toma aproximadamente 10 segundos.
<<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
Esto parece un comportamiento bastante extraño también, ya que solo algunas variables están configuradas para su uso posterior.
Q2: ¿Alguien tiene alguna explicación para eso?
Q3: En términos más generales, me gustaría preguntar si alguien está usando pgfSweave con éxito. Con éxito quiero decir que todas las cosas que funcionan en Sweave también funcionan en pgfSweave, con el beneficio adicional de fuentes bonitas y velocidad mejorada. ;)
Muchas gracias por las respuestas!
No uso sweave así que no puedo comentar sobre eso pero puedo comentar que ggplot es lento, este es un problema conocido al trazar datos con> 1000 puntos (a veces menos). Si buscas gráficos "más rápidos" prueba Lattice o Base Graphics. Sin embargo, no serán tan bonitos como antes. –
... y normalmente, la velocidad no es un problema al trazar. A menos que quiera usar Sweave ...;) – donodarazao
Hola, donodarazo, soy uno de los autores del tikzDevice. Intentaré reproducir tus problemas de ggplot para ver si hay una solución. Si pudieras guardar 'elevation',' area' y 'que_id' en un archivo RData y enviar un enlace de descarga a la dirección de correo electrónico indicada en la entrada del paquete en CRAN, sería útil. También le enviaré esta pregunta a Cameron; puede que tenga algunas ideas sobre los problemas del pgfSweave. – Sharpie