2017-01-30 5 views
1

Ich möchte meine Daten unterteilen, aber die Färbung behalten, die erzeugt wird, wenn Sie alle Daten verwenden.Behalten Sie die Farbgebung bei, wenn Sie Daten unterteilen

Hier werden alle Daten:

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
    geom_point(shape = 21, aes(fill = Species), size=4, stroke=1) 

, die ergibt:

enter image description here

Aber wenn ich auf Arten, wie virginica Teilmenge, werden die Farben nicht erhalten:

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
    geom_point(data = subset(iris, Species=='virginica'), 
    shape = 21, aes(fill = Species), size=4, stroke=1) 

enter image description here

Ich verstehe, dass dies wahrscheinlich das richtige Standardverhalten ist, aber ich möchte das Farbschema für Präsentationszwecke beibehalten. Wie würde ich das erreichen?

Bonus: Pflegen Sie die gleiche Achse Dimensionen wie auch

+0

Verwenden Sie einen 'scale_fill_ *' Funktion angeben, welche Farbe geht mit dem, was Wert, z.B. 'scale_fill_manual (Werte = c ('virginica' = 'dodgerblue'))' – alistaire

Antwort

3

Eine Möglichkeit ist scale_fill_manual zu verwenden, wie von @alistaire vorgeschlagen. Eine andere Möglichkeit ist das Verhindern von Drop-Faktor-Levels, aber das wird die Namen der Level in Legenden haben, obwohl für jedes Level keine Daten vorhanden sind, nicht sicher, ob Sie das wollen. Dadurch erhalten Sie jedoch ein vollständiges Bild des Datensatzes, unabhängig davon, welche Teilmenge Sie auswählen.

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
     geom_point(shape = 21, aes(fill = Species), size=4, stroke=1) 

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
     geom_point(data = subset(iris, Species %in% c('virginica', 'setosa')), 
       shape = 21, aes(fill = Species), size=4, stroke=1) + 
     scale_fill_discrete(drop = FALSE) 

enter image description here

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
     geom_point(data = subset(iris, Species=='virginica'), 
       shape = 21, aes(fill = Species), size=4, stroke=1) + 
     scale_fill_discrete(drop = FALSE) 

enter image description here

Verwandte Themen