J'ai commencé à utiliser Sweave il y a quelque temps. Cependant, comme la plupart des gens j'ai rencontré très vite un problème majeur: la vitesse. Le transfert d'un document volumineux prend plusieurs années, ce qui rend le travail efficace très difficile. Le traitement des données peut être accéléré avec cacheSweave. Cependant, les graphiques - en particulier ggplot;) - prennent encore trop de temps à rendre. C'est comme ça que je veux utiliser pgfSweave.Problèmes avec ggplot et pgfSweave
Après de nombreuses heures, j'ai finalement réussi à mettre en place un système de travail avec Eclipse/StatET/Texlipse. J'ai alors voulu convertir un rapport existant à utiliser avec pgfSweave et j'ai eu une mauvaise surprise: la plupart de mes ggplots ne semblent plus fonctionner. L'intrigue suivante par exemple fonctionne parfaitement dans la console et Sweave:
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Courir avec pgfSweave, cependant, je reçois cette erreur:
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
Quand je retire aes (...) de geom_point , l'intrigue fonctionne parfaitement avec pgfSweave.
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
Edit: Je enquêté sur plus sur le problème et pourrait réduire le problème au périphérique tikz.
Cela fonctionne très bien:
quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Cela donne à l'erreur ci-dessus:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()
Cela fonctionne très bien ainsi:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()
Je pourrais répéter avec 5 ggplots. Lorsque vous n'utilisez pas de couleur (ou de taille, alpha, ...) dans le mapping, cela fonctionne avec tikz.
Q1: Quelqu'un at-il des explications pour ce comportement?
En outre, la mise en cache de blocs de code non-plot ne fonctionne pas très bien. Le fragment de code suivant ne prend pas du tout de temps avec Sweave. Avec pgfSweave, cela prend environ 10 secondes.
<<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
Cela semble un comportement assez étrange, car seules certaines variables sont définies pour une utilisation ultérieure.
Q2: Quelqu'un at-il des explications pour cela? Q3: Plus généralement, j'aimerais savoir si quelqu'un utilise pgfSweave avec succès? Avec succès, je veux dire que tout ce qui fonctionne dans Sweave fonctionne également dans pgfSweave, avec l'avantage supplémentaire de belles polices et une vitesse améliorée. ;)
Merci beaucoup pour les réponses!
Je n'utilise pas sweave donc je ne peux pas commenter cela mais je peux commenter que ggplot est lent, c'est un problème connu en traçant des données avec> 1000 points (parfois moins). Si vous cherchez des graphismes "plus rapides", essayez Lattice ou Base Graphics. Ils ne seront pas aussi beaux hors de la boîte cependant. –
... et normalement, la vitesse n'est pas vraiment un problème lors du traçage. Sauf si vous voulez utiliser Sweave ...;) – donodarazao
Salut donodarazo, je suis l'un des auteurs du tikzDevice. Je vais essayer de reproduire vos problèmes ggplot pour voir s'il y a un correctif. Si vous pouviez enregistrer 'elevation',' area' et 'que_id' dans un fichier RData et envoyer un lien de téléchargement vers l'adresse e-mail indiquée dans l'entrée du paquet sur CRAN cela aiderait. Je transmettrai également cette question à Cameron --- il pourrait avoir quelques idées concernant les problèmes de pgfSweave. – Sharpie