Ich verwende R, um Daten zu analysieren, ggplot, um Diagramme zu erstellen, TikzDevice, um sie zu drucken, und schließlich Latex, um einen Bericht zu erstellen. Das Problem ist, dass große Plots mit vielen Punkten aufgrund der Speichergrenze von Latex nicht funktionieren. Ich fand hier https://github.com/yihui/tikzDevice/issues/103 eine Lösung, die das Diagramm vor dem Drucken der Tikz-Datei rastert, die die Punkte und den Text einzeln drucken können.Rasterise ggplot Bilder in R für 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?
In diesem Beispiel ist die erste pdflatex
ausfällt. Der zweite gelingt aufgrund der Rasterung.
Wie kann ich dies mit ggplot anwenden?
Sie könnten das Plotpanel aus der gtable extrahieren, dieses auf einem randlosen PNG zeichnen und es dann als Hintergrund annotation_raster oder annotation_custom anzeigen. Vergessen Sie nicht, die Waage mit den gleichen Daten zu trainieren, zB mit einer geom_blank Schicht. Es ist unnötig zu sagen, dass dies fragil, fehleranfällig und begrenzt ist (z. B. Facetten). Ein ggplot + -Grid-Level-Weg, um bestimmte Layer zu rasterisieren, wäre nett und wurde in der Vergangenheit vorgeschlagen, aber nie in den Griff bekommen. – baptiste
hmm, ja hört sich nach viel Aufwand an, der am Ende nicht funktioniert ... ich hatte gehofft für etw wie 'geom_rasterise', oder' geom_point (raster = T) ';-) – Jonas
Es würde nicht viel dauern ein solches Argument bis zur Bauphase durchgehen, aber das würde Grid-Grobs erfordern, um diese Low-Level-Fähigkeit zu haben. Und hier ist es wahrscheinlich nicht so weit hergeholt, da grid.cap ähnliche Funktionen bietet. – baptiste