Erzeugen einer konsistenten dynamischen Farbpalette in ggplot innerhalb einer Schleife?

8

Ich habe einen Datensatz namens d1 ähnlich wie:

%Vor%

Ich habe eine Schleife, die für jede eindeutige Position eine ziemlich komplexe Grafik erstellt (sie klebt viele Dinge zusammen mit grid.arrange , weshalb ich facet_wrap an der Stelle nicht verwenden kann, um die Legende / Farbe konsistent zu halten) ein Teil der Handlung).

Sagen Sie, es gibt 4 Kategorien für "Typ", das Problem, wenn ein Ort eine andere Anzahl von "Typen" als der andere hat, sind die zugewiesenen Farben nicht konsistent zwischen jedem Plot. Ich kann sie manuell zwingen, gleich zu sein, aber ich versuche, diese Funktion zu verallgemeinern. Google hat mich enttäuscht.

Für den folgenden Block ist d1 eine Teilmenge der Daten basierend auf dem Ortstyp, z.

%Vor%

Betrachten Sie die Handlung, die innerhalb der Schleife ist:

%Vor%

Der Befehl geom_rect durchläuft die Daten und erstellt basierend auf der Tiefe von und bis zu einer Überlagerung basierend auf dem Fülltyp. Ich kann scale_fill_manual("Lith", c("Val1" = "DodgerBlue4"...) etc verwenden, um es manuell zu setzen, aber das macht die Zwecke zunichte. Wenn ich habe: Typen wie, wo ich etwas möchte:

%Vor%

Ich möchte, dass bird_three grün ist, auch wenn bird_two nicht existiert, ohne es explizit mit scale_fill_manual zu setzen. Gibt es eine Möglichkeit, eine globale Liste von Namen für die Farbpalette festzulegen? Vielleicht, indem Sie das Array von etwas wie:

bereitstellen %Vor%     
mat4nier 24.01.2014, 01:36
quelle

2 Antworten

5

Ziemlich spät, aber es gibt tatsächlich eine triviale Lösung, indem Sie scale_fill_discrete(drop=F)

setzen %Vor%

Und hier sind Dummy-Daten, die ich verwendet habe:

%Vor%     
BrodieG 30.01.2014, 17:52
quelle
5

Es ist nicht wichtig, ob sie in einer Schleife sind oder nicht, Sie müssen nur jede Ebene mit einer Farbe verknüpfen. In Ihrem Fall:

%Vor%

In einem einfachen Beispiel:

%Vor%

Sie können sehen, dass die Ebene C in beiden Plots grün ist.

Als Antwort auf @BrodieG können Sie die Farben halbautomatisch einstellen. Es erstellt den benannten Vektor unter Verwendung der Ebenen von type und Farbwerten aus dem RColorBrewer-Paket. Dies könnte sehr einfach entwickelt werden, um in eine Funktion aufzunehmen:

%Vor%

Wie @hadley hervorhebt, ist es in diesem Fall sogar einfacher, die Grenzen der Skala festzulegen, obwohl ich es in meiner typischen Anwendung nützlicher finde, ein Objekt wie colourList einzurichten, das über mehrere Diagramme hinweg verwendet werden kann Setzen Sie einfach values . Das Festlegen von limits behält auch die Ebenen für die Legende bei, die möglicherweise nicht gewünscht sind:

%Vor%

Wie @hadley hervorhebt, ist es in diesem Fall sogar einfacher, die Grenzen der Skala festzulegen, obwohl ich es in meiner typischen Anwendung nützlicher finde, ein Objekt wie colourList einzurichten, das über mehrere Diagramme hinweg verwendet werden kann Setzen Sie einfach values . Das Festlegen von limits behält auch die Ebenen für die Legende bei, die möglicherweise nicht gewünscht sind:

%Vor%

    
alexwhan 24.01.2014 02:37
quelle

Tags und Links