Ich platziere mehrere Diagramme in einem Bild mit gridExtra::grid.arrange
und möchte die Option haben, den kombinierten Plot als ein Objekt zu speichern, das innerhalb einer Funktion als Teil einer Liste zurückgegebener Objekte zurückgegeben werden kann. Idealerweise möchte ich dies tun, ohne das Plot-Objekt zu drucken.
Der folgende Code erstellt zwei Diagramme, kombiniert sie mit grid.arrange
und versucht, das Ergebnis in x
zu speichern. % Co_de% wird jedoch als x
ausgewertet, und das Diagramm wird gedruckt. Die Dokumentation für NULL
zeigt mich auf grid.arrange
und schlägt vor, dass das Plotten mit arrangeGrob
ausgeschaltet werden kann, aber ich bekomme einen Fehler, wenn ich das probiere, weil plot=FALSE
kein grob-Objekt ist.
Irgendwelche Vorschläge für das, was ich nicht verstehe?
%Vor% Nach den Kommentaren füge ich diese Änderung hinzu. Wenn ich es mit FALSE
versuche, bekomme ich überhaupt keine Ausgabe.
Der Code in Ihrer Bearbeitung funktioniert nicht richtig, da Sie gridExtra
nicht geladen haben.
Bearbeiten: Seit Version 2.0.0 ist mein Kommentar zu grid
Abhängigkeit unten nicht mehr gültig, da grid
jetzt importiert wird.
Bearbeiten: Mit gridExtra Version & gt; = 2.0.0, müssen Sie kein Paket anfügen,
%Vor%Komisch, dass das so vor kurzem gestellt wurde - ich habe diese Woche auch schon mit diesem Problem angefangen und konnte es auf eine etwas hacky Art lösen, aber ich konnte keine andere Lösung finden, mit der ich glücklicher war.
Problem 1: ggplotGrob
wurde nicht gefunden
Ich musste sicherstellen, dass ggplot2 geladen ist. Ich verstehe nicht ganz, was passiert (Ich gebe zu, ich verstehe nicht vollständig importiert / hängt / Anhang / etc), aber das folgende behebt das. Ich wäre offen für Rückmeldungen, wenn das sehr gefährlich ist.
%Vor%Jemand anders ist mit diesem Blogpost verbunden und ich denke, das funktioniert wie nun, aber von meinem (nicht vollständigen) Verständnis ist diese Lösung weniger schrecklich. Ich denke.
Problem 2: keine Ebenen in der Handlung
Wie Sie auch festgestellt haben, können wir das Problem beheben, indem wir grid.arrange
verwenden, aber NULL zurückgibt und das Speichern in einem Objekt nicht erlaubt. Also wollte ich auch arrangeGrob
verwenden, aber ich lief auch in den obigen Fehler, wenn gridExtra noch nicht geladen war. Das erneute Anwenden des Fixes von Problem 1 scheint nicht zu funktionieren (vielleicht wird das Paket zu früh abgehängt?). ABER mir ist aufgefallen, dass das Aufrufen von grid::grid.draw
auf dem Ergebnis von arrangeGrob es ohne Fehler druckt. Also habe ich der Ausgabe von arrangeGrob eine benutzerdefinierte Klasse hinzugefügt und eine generische Druckmethode hinzugefügt, die einfach grid.draw
Hurra, jetzt kann ich eine neue R-Sitzung öffnen, in der keine Pakete explizit geladen sind, und ich kann erfolgreich eine Funktion aufrufen, die ein Grob erzeugt und es später druckt!
Sie können den Code in Aktion in meinem Paket auf GitHub sehen.