Speichere Yaxis-Legenden als separaten Grob?

8

Ich habe ein sehr großes Streudiagramm von zwei Kategorien, in dem ein Punkt ein "Treffer" ist. Ich wollte Histogramme oben und auf der Seite der Handlung machen, um die Treffer darzustellen, wie auf der folgenden Website zu sehen: Ссылка

Ich kann die Plots als 2-by-2-Raster anordnen, aber ich stoße auf ein Problem: Die Yaxis meines primären Streudiagramms haben sehr lange Titel (wichtig für das Projekt) und im 2x2-Raster streckt sich das obere Histogramm voll aus Breite und ist nicht mehr entlang der x-Achse ausgerichtet.

Mein Gedanke war, ein 3x3 Raster zu machen, in dem ich das äußerste linke Raster für Titel verwende. Dazu muss jedoch der Y-Achsen-Text als "grob" gespeichert werden. Im obigen Blogpost wird dies wie folgt erreicht:

%Vor%

Damit kann "legende" in das 2x2-Raster-Layout eingefügt werden. Wenn ich die gleiche Logik verwenden könnte, um einen separaten Grob für die Yaxis-Labels zu machen, wäre alles gut. Ich habe mindestens Folgendes versucht:

%Vor%

Ist es möglich, neben der Legend Box auch noch etwas zu tun? Wenn ja - lass es mich wissen. Wenn nicht, werde ich irgendwelche Vorschläge machen, wie man die drei Plots anordnet, während sie ausgerichtet bleiben und die Y-Labels erhalten.

Danke

    
zach 07.10.2011, 13:56
quelle

1 Antwort

9

Diese Frage hat lange genug gesessen, dass es Zeit ist, eine Antwort für die Nachwelt zu dokumentieren.

Die kurze Antwort lautet, dass stark angepasste Datenvisualisierungen nicht mithilfe von Funktionsumhüllungen aus den Paketen "gitter" und "ggplot2" durchgeführt werden können. Der Zweck eines Funktions-Wrappers besteht darin, einige der Entscheidungen aus Ihren Händen zu nehmen, so dass Sie immer auf die Entscheidungen beschränkt sind, die ursprünglich vom Funktionskodierer vorgesehen waren. Ich empfehle jedem, die Pakete 'grid' oder 'ggplot2' zu lernen, aber diese Pakete sind für die Datensuche nützlicher als für die kreative Verwendung von Datenvisualisierungen.

Diese Antwort ist für diejenigen, die ein benutzerdefiniertes Erscheinungsbild erstellen möchten. Der folgende Prozess kann einen halben Tag dauern, aber das ist bedeutend weniger Zeit als es dauern würde, um das "Gitter" oder "hacken" zu hacken. ggplot2 'Pakete in die gewünschte Form. Dies ist keine Kritik an einem dieser Pakete; es ist nur ein Nebenprodukt ihres Zwecks. Wenn Sie ein Creative-Visual für eine Publikation oder einen Kunden benötigen, sind 4 oder 5 Stunden am Tag nichts im Vergleich zur Auszahlung.

Die Arbeit, um ein benutzerdefiniertes Bild zu erstellen, ist mit dem Grid-Paket ziemlich einfach, aber das bedeutet nicht, dass die Mathematik dahinter immer einfach ist. Die meiste Arbeit in diesem Beispiel ist eigentlich die Mathematik und nicht die Grafik.

Vorwort : Es gibt einige Dinge, die Sie wissen sollten, bevor Sie mit dem Basis-Grid-Paket für Ihre Visuals arbeiten. Der erste ist, dass "Grid" von der Idee der Viewports abgeht. Diese zeichnen Bereiche auf, in denen Sie innerhalb dieses Bereichs referenzieren können, wobei der Rest der Grafik ignoriert wird. Dies ist wichtig, da Sie damit Grafiken erstellen können, ohne Ihre Arbeit in Bruchteilen des gesamten Bereichs skalieren zu müssen. Es ist ähnlich wie die Layout-Optionen in den Basis-Plotfunktionen, außer dass sie sich überlappen, gedreht und transparent gemacht werden können.

Einheiten sind etwas anderes zu wissen. Die Ansichtsfenster verfügen jeweils über verschiedene Einheiten, mit denen Sie Positionen und Größen anzeigen können. Sie können die ganze Liste in der Grid-Dokumentation sehen, aber es gibt nur ein paar, die ich sehr oft benutze: npc, native, strwidth und lines. NPC-Einheiten beginnen bei (0,0) in der unteren linken Ecke und gehen zu c (1,1) in der oberen rechten Ecke. Native Einheiten verwenden eine "xscale" - und eine "yscale" -Ebene, um einen Plotting-Space für Daten zu erstellen. Strwidth-Einheiten geben an, wie breit eine bestimmte Textzeichenfolge einmal auf der Grafik gedruckt wird. Linieneinheiten sagen Ihnen, wie groß eine Textzeile einmal auf der Grafik gedruckt wird. Da immer mehrere Arten von Einheiten verfügbar sind, sollten Sie sich immer daran gewöhnen, entweder eine Zahl explizit mit einer 'Einheit'-Funktion zu definieren oder das' default.units'-Argument innerhalb Ihrer Zeichenfunktionen anzugeben.

Schließlich können Sie Begründungen für alle Standorte Ihrer Objekte angeben. Das ist riesig. Das bedeutet, dass Sie die Position einer Form angeben und dann angeben können, wie diese Form horizontal und vertikal ausgerichtet sein soll (Mitte, links, rechts, unten, oben). Sie können die Dinge perfekt auf diese Weise ausrichten, indem Sie auf die Position anderer Objekte verweisen.

Das machen wir : Das ist keine perfekte Grafik, da ich raten muss, was das OP will, aber es ist genug, um uns auf den Weg zu einem perfekten zu bringen Grafik.

Schritt 1 Laden Sie einige Bibliotheken, mit denen Sie arbeiten möchten. Wenn Sie stark angepasste Visualisierungen erstellen möchten, verwenden Sie das "Grid" -Paket. Es ist der Basissatz von Funktionen, die Wrapper wie "gitter" und "ggplot2" aufrufen. Wenn Sie mit Daten arbeiten möchten, verwenden Sie das Paket "lubridate", weil IT Ihr Leben besser macht. Letzteres ist eine persönliche Vorliebe: Wenn ich irgendeine Art von Datenzusammenfassung mache, verwende ich gerne das "plyr" -Paket. Es erlaubt mir, meine Daten schnell zu aggregierten Formen zu formen.

%Vor%

Beispieldatengenerierung : Dies ist nicht notwendig, wenn Sie bereits Ihre Daten haben, aber für dieses Beispiel erstelle ich eine Reihe von Beispieldaten. Sie können damit umgehen, indem Sie die Benutzereinstellungen für die Datengenerierung ändern. Das Skript ist flexibel und passt sich den generierten Daten an. Fühlen Sie sich frei, weitere Websites hinzuzufügen und mit den Lambda-Werten herumzuspielen.

%Vor%

Schritt 2 Jetzt müssen wir entscheiden, wie unsere Grafik funktionieren soll. Es ist sinnvoll, Dinge wie Größen und Farben in einem anderen Abschnitt Ihres Codes zu trennen, damit Sie schnell Änderungen vornehmen können. Hier habe ich einige Grundeinstellungen gewählt, die eine ordentliche Grafik erzeugen sollten. Sie werden feststellen, dass einige der Größeneinstellungen die Funktion "Einheit" verwenden. Dies ist eine der erstaunlichen Eigenschaften des Grid-Pakets. Sie können verschiedene Einheiten verwenden, um den Platz auf Ihrer Grafik zu beschreiben. Zum Beispiel ist unit(1, "lines") die Höhe einer Textzeile. Dies erleichtert das Auslegen einer Grafik erheblich.

%Vor%

Schritt 3 : Es ist Zeit, die Grafik zu erstellen. Ich habe begrenzten Platz für Erklärungen in einer SO-Antwort, so werde ich zusammenfassen und dann die Code-Kommentare, um die Details zu erklären. Kurz gesagt, ich berechne, wie groß alles sein wird und mache dann die Pläne einzeln. Für jedes Diagramm formatiere ich zuerst meine Daten, damit ich das Ansichtsfenster entsprechend spezifizieren kann. Dann lege ich Etiketten ab, die hinter den Daten liegen müssen, und dann plotte ich die Daten. Am Ende "öffne ich" das Ansichtsfenster, um es abzuschließen.

%Vor%     
Dinre 26.03.2013, 16:42
quelle

Tags und Links