Verschiedene Farbpaletten für zwei verschiedene Farbästhetikemappings in ggplot2

8

Meine Frage ist sehr ähnlich wie dies und dies und auch diese Frage. Ich habe ein Streudiagramm (mit geom_point ), das um einen Faktor farbig ist und eine bestimmte Farbpalette verwendet. Ich verwende stat_smooth , um bestimmte Glättungslinien durch die Punkte zu zeichnen, gruppiert nach einem anderen Faktor. Ich möchte, dass diese Linien eine andere Farbpalette verwenden.

Hier ist ein Dropbox-Link zu einigen Beispieldaten . Mach einfach ein

%Vor%

Normalerweise habe ich meine Daten in einer data.table, daher könnte es hilfreich sein, auch das zu ändern. Oh, und hier ist das Farbschema, das ich gerade benutze, du kannst scale_colour_brewer benutzen, um dein eigenes zu erstellen, ich füge das nur der Vollständigkeit halber bei.

%Vor%

Hoffentlich ist das klar genug. Hier ist ein Beispielcode:

%Vor%

Wie kann das in ggplot2 gemacht werden? Von den anderen Fragen, die ich gesammelt habe, könnte ich jede Zeile manuell spezifizieren, aber ich möchte das vermeiden.

    
Samuel Tan 30.04.2015, 01:48
quelle

2 Antworten

10

Sie können separate Farbzuordnungen für die Linien und die Punkte erstellen, indem Sie eine gefüllte Punktmarkierung für die Punkte verwenden und diese der fill -Asthetik zuordnen, während die Linien der colour -Asthetik zugeordnet werden. Gefüllte Punktemarkierungen sind jene mit den Nummern 21 bis 25 (siehe ?pch ). Hier ist ein Beispiel, das @ RichardEricksons Code anpasst:

%Vor%

Hier ist eine Erklärung, was ich getan habe:

  1. In geom_point , ändern Sie colour aesthestic in fill . Setzen Sie auch colour="transparent" außerhalb von aes . Das wird die Grenze um die Punkte los. Wenn Sie einen Rahmen möchten, legen Sie ihn auf die gewünschte Rahmenfarbe fest.
  2. In scale_colour_manual habe ich die Farben auf blau und rot eingestellt, aber Sie können sie natürlich auf das einstellen, was Sie bevorzugen.
  3. Fügen Sie scale_fill_manual hinzu, um die Farben der Punkte mithilfe der fill -Ästhetik zu setzen.
  4. Fügen Sie scale_shape_manual hinzu und setzen Sie die Werte auf 21 und 24 (gefüllte Kreise bzw. Dreiecke).
  5. Der gesamte Inhalt von guides() dient dazu, die Legende zu ändern. Ich bin mir nicht sicher, warum, aber ohne diese Überschreibungen sind die Legenden für Füllung und Form leer. Beachten Sie, dass ich fill="black" für die shape -Legende festgelegt habe, diese aber grau angezeigt wird. Ich weiß nicht warum, aber ohne fill="somecolor" ist die shape legende leer. Schließlich überschrieb ich die colour -Legende, um den Linientyp in die Farblegende aufzunehmen, wodurch ich die überflüssige linetype -Legende loswerden konnte. Ich bin nicht ganz glücklich mit der Legende, aber es war das Beste, was ich mir vorstellen konnte, ohne auf Sondernahrung zurückzugreifen.

HINWEIS: Ich habe color=NA in color="transparent" geändert, da color=NA (in Version 2 von ggplot2) die Punkte komplett verschwinden lässt, selbst wenn Sie einen Punkt mit separatem Rahmen und verwenden Fülle Farben. Danke an @aosmith für darauf hinweisen .

    
eipi10 30.04.2015, 04:21
quelle
3

Ich glaube nicht, dass ggplot2 Ihnen erlauben wird, die Farbe zweimal zu ändern und die Legende zu aktualisieren. Ich erinnere mich, dass Sie scale_color_manual in einer Handlung nicht zweimal ändern können. Ich konnte diese Webseite nicht finden, aber post berührt das Thema. Ich habe auch versucht, die Vorschläge in diesem Post zu verwenden, aber das hat nicht funktioniert. Wahrscheinlich, weil wir versuchen, geoms zu mischen (aber das ist nur eine Vermutung).

Ich kann entweder die Regressionslinien farbig erhalten:

%Vor%

Oder die Datenpunkte zum Zeichnen:

%Vor%

Aber nicht beides:

%Vor%

Ich denke, Sie müssen jede Zeile manuell hinzufügen. Hoffentlich weiß jemand anders, wie man das beantwortet, aber ich denke nicht, dass @hadley beide Farben verändert. Zum Glück, du bist data.table , also sollte es einfach zu tun sein: -)

Allen anderen, die versuchen, dies zu lösen, einen Kommentar zukommen lassen Ich hoffe, dass meine teilweise Antwort Ihnen hilft, diese Frage zu beantworten. Außerdem zeigt meine dritte Abbildung, wie ggplot2 nicht die Legendenfarbe korrekt erhält, wie das OP es wünscht. Als weiteren Tipp könntest du versuchen, mit den Legendenoptionen herumzuspielen.

    
Richard Erickson 30.04.2015 03:23
quelle

Tags und Links