Bearbeiten: Fügen Sie möglichen Ansatz für ggplot
hinzu.
Beachten Sie, dass die Grund die plot
, insbesondere nicht automatisch dev.off()
nicht nennen, ist, dass es sehr häufig ist - nach plot
Aufruf - zusätzliches Material hinzuzufügen (Annotationen, ergänzende Plotten Funktionen, Titel, Legenden, etc. .) mit zusätzlichen Anrufen, bevor dev.off()
aufgerufen wird, um die Ausgabe abzuschließen.
Aber, wenn Sie wirklichplot
wollen die Handlung abzuschließen und verhindern jede weitere Inhalte hinzugefügt werden, können Sie es tun, indem plot
neu zu definieren:
plot <- function(...) {
graphics::plot(...)
dev.off()
}
Beachten Sie, dass für Fenster-basierten Grafikgeräten (zB x11
), wird die Handlung kurz auf dem Bildschirm blinken, bevor er verschwand, da dev.off()
schließt das Fenster, aber es sollte für Dateien funktionieren:
> png("plot.png")
> plot(1:10,runif(10))
null device <-- proof that dev.off() was called
1
>
Für ggplot2
, ich denke, Ihre beste Wette ist es, die print
Methode zu überschreiben (so wird ein Plot normalerweise auf dem Bildschirm angezeigt). Also, wenn Sie definieren:
print.ggplot <- function(...) {
ggplot2:::print.ggplot(...)
dev.off()
}
dann:
> png("plot.png")
> ggplot(mapping=aes(x=1:10,y=1:10))+geom_line()
[[ print method is implicitly called here ]]
> dev.off() # to prove that dev.off() was already called
Error in dev.off() : cannel shut down device 1 (the null device)
>
erscheint so, wie Sie wollen zu arbeiten.
Ich benutze nicht RStudio, also bin ich mir nicht sicher, was es anders macht, aber ich nehme an, dass es die Grafikbefehle so abfängt, dass es gleichzeitig den "Plot in progress" anzeigt Die Datei wird finalisiert, anstatt die Datei tatsächlich anzuzeigen (was bei Bitmap-Grafiken erst dann möglich ist, wenn der Plot vollständig fertig ist und dev.off()
aufgerufen wird).
Um den zweiten Teil zu adressieren: RStudio erstellt ein eigenes Grafikgerät vom Typ 'RStudioGD'. Wenn Sie mit der rechten Maustaste auf ein Diagramm in RStudio klicken und es "inspizieren", sehen Sie, dass das Bild eine temporäre Datei ist, die von einem hinter den Kulissen laufenden Server an RStudio (im Wesentlichen ein Browser) gesendet wird. – neilfws