Speichern Sie die Ausgabe von gridExtra :: grid.arrange in ein Objekt

9

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.

%Vor%     
Benjamin 15.03.2015, 16:00
quelle

2 Antworten

2

Der Code in Ihrer Bearbeitung funktioniert nicht richtig, da Sie gridExtra nicht geladen haben.

%Vor%

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%     
tonytonov 16.03.2015, 08:49
quelle
2

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

aufruft %Vor%

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.

    
Dean Attali 26.03.2015 20:37
quelle

Tags und Links