J'utilise R pour analyser les données, ggplot pour créer des graphiques, tikzDevice pour les imprimer et enfin latex pour créer un rapport. Le problème est que les grandes parcelles avec beaucoup de points échouent en raison de la limite de mémoire du latex. J'ai trouvé ici https://github.com/yihui/tikzDevice/issues/103 une solution qui pixellise l'intrigue avant d'imprimer le fichier tikz, ce qui permet d'imprimer les points et le texte individuellement.Rasterise images ggplot dans R pour tikzdevice
require(png)
require(ggplot2)
require(tikzDevice)
## generate data
n=1000000; x=rnorm(n); y=rnorm(n)
## first try primitive
tikz("test.tex",standAlone=TRUE)
plot(x,y)
dev.off()
## fails due to memory
system("pdflatex test.tex")
## rasterise points first
png("inner.png",width=8,height=6,units="in",res=300,bg="transparent")
par(mar=c(0,0,0,0))
plot.new(); plot.window(range(x), range(y))
usr <- par("usr")
points(x,y)
dev.off()
# create tikz file with rasterised points
im <- readPNG("inner.png",native=TRUE)
tikz("test.tex",7,6,standAlone=TRUE)
plot.new()
plot.window(usr[1:2],usr[3:4],xaxs="i",yaxs="i")
rasterImage(im, usr[1],usr[3],usr[2],usr[4])
axis(1); axis(2); box(); title(xlab="x",ylab="y")
dev.off()
## this works
system("pdflatex test.tex")
## now with ggplot
p <- ggplot(data.frame(x=x, y=y), aes(x=x, y=y)) + geom_point()
## what here?
Dans cet exemple, le premier pdflatex
échoue. La seconde réussit grâce à la pixellisation.
Comment puis-je l'appliquer avec ggplot?
Vous pouvez extraire le panneau de tracé à partir de gtable, dessiner sur un png sans bordure, puis l'afficher en arrière-plan annotation_raster ou annotation_custom. N'oubliez pas de former les échelles avec les mêmes données, par exemple avec une couche geom_blank. Inutile de dire que c'est fragile, sujet aux erreurs et limité (par exemple les facettes). Une méthode ggplot + au niveau de la grille pour pixelliser des calques spécifiques serait bien et a été suggérée dans le passé, mais n'a jamais eu de traction. – baptiste
hmm, oui cela ressemble à beaucoup d'efforts qui ne fonctionnent pas à la fin ... j'espérais pour sth comme 'geom_rasterise', ou' geom_point (raster = T) ';-) – Jonas
Il ne faudrait pas beaucoup à transmettre un tel argument jusqu'à la phase de construction, mais cela nécessiterait des grobs de grille pour avoir cette capacité de bas niveau. Et là encore, ce n'est probablement pas si tiré par les cheveux puisque grid.cap fournit des fonctionnalités similaires. – baptiste