2016-08-17 5 views
-1

Hier ist eine dumme data.frame:Hinzufügen Konturfarbe als Punkt Attribut

df <- read.table(textConnection(
"pole medal bag  x  y 
north gold paper 0.852 0.423 
north gold plastic 0.277 0.055 
north silver paper 0.257 0.211 
north silver plastic 0.457 0.614 
north bronze paper 0.825 0.299 
north bronze plastic 0.672 0.126 
south gold paper 0.482 0.764 
south gold plastic 0.603 0.869 
south silver paper 0.327 0.451 
south silver plastic 0.147 0.672 
south bronze paper 0.140 0.466 
south bronze plastic 0.833 0.325 
"), header = TRUE) 

Ich weiß, wie ein Streudiagramm für diese Daten in einer Art und Weise zu zeichnen, die Farbe verwendet und Form zwei, um anzuzeigen, von der Faktor-Attribute; zum Beispiel:

library(ggplot2) 
ggplot(data = df, aes(x = x, y = y)) + 
geom_point(size = 4, aes(shape = pole, color = bag)) 

enter image description here

würde Ich mag einen weiteren Punkt Feature hinzuzufügen, um einen dritten Faktor Attribut, um anzuzeigen (in diesem Fall medal). Die eine Möglichkeit, die mir in den Sinn kommt, ist eine farbige Kontur.

Gibt es eine bequeme Möglichkeit, dies zu tun? (Ein kniffliger Aspekt des Problems besteht darin, dass die Farbpalette für die Konturen sich von der für die Punktfüllungen unterscheiden muss, da die Kontur und die Füllung für jeden Punkt visuell unterscheidbar sein müssen.)

UPDATE:

Als ich Gregor Vorschlag versuchen, sehen die Punkte richtig, aber die Legende ist verkorkste:

enter image description here

+1

Sie müssen wahrscheinlich Ihre eigenen Farbschemas für die Füllung vs Farbe einrichten, um dies in Ordnung zu bringen. Plus einige legendäre Arbeit. Wie: scale_fill_manual (Werte = c ("pink", "white")) + \t scale_color_manual (Werte = c ("braun", "gold", "grey74")) + \t guides (fill = guide_legend (override. aes = Liste (color = c ("pink", "white"))), color = guide_legend (override.aes ​​= Liste (shape = 21))) ' – aosmith

+0

Warum wurde diese Frage abgelehnt? – kjo

+0

@ kjo, wahrscheinlich, weil dies ausführlich in den Dokumenten von 'geom_point' diskutiert wird. Auch [siehe zum Beispiel hier] (http://stackoverflow.com/questions/15965870/fill-and-border-colour-in-geom-point-scale-colour-manual-in-gplot) und – Axeman

Antwort

3

Ja, Sie können! Es gibt ein Beispiel in der Hilfe für ?geom_point:

# For shapes that have a border (like 21), you can colour the inside and 
# outside separately. Use the stroke aesthetic to modify the width of the 
# border 
ggplot(mtcars, aes(wt, mpg)) + 
    geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 5) 

In Ihrem Fall Sie verwenden möchten, werden Formen 21 (Kreise mit Umriss) und 24 (Dreiecke mit Umriss) wie folgt aus:

ggplot(data = df, aes(x = x, y = y)) + 
    geom_point(aes(shape = pole, color = medal, fill = bag), 
      size = 4, stroke = 2) + 
    scale_shape_manual(values = c(21, 24)) 

Beachten Sie, dass fill dem Mittelpunkt der Punkte und color dem Umriss entspricht. Sie können das Gewicht des Umrisses ändern, indem Sie stroke einstellen.

Wie in den Kommentaren erwähnt, müssen Sie einige zusätzliche Feinabstimmungen vornehmen, um die Legende richtig zu machen. Zum obigen Diagramm hinzufügen:

fill_col = c("pink", "white") 
outline_col = c("brown", "gold", "grey74") 

scale_fill_manual(values = fill_col) + 
scale_color_manual(values = outline_col) + 
guides(fill = guide_legend(override.aes = list(color = fill_col)), 
     color = guide_legend(override.aes = list(shape = 21))) 
Verwandte Themen