Ich habe mich im letzten Monat mit R vertraut gemacht.
Hier ist meine Frage:
Was ist eine gute Möglichkeit, kategorialen Variablen in ggplot2 Farben zuzuweisen, die eine stabile Zuordnung haben? Ich benötige konsistente Farben für eine Reihe von Diagrammen mit unterschiedlichen Teilmengen und unterschiedlicher Anzahl kategorialer Variablen.
Beispielsweise,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
wo categoricalData
hat 5 Ebenen.
Und dann
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
wo categoricalData.subset
hat 3 Ebenen.
Eine bestimmte Ebene in beiden Sätzen hat jedoch eine andere Farbe, was das gemeinsame Lesen der Diagramme erschwert.
Muss ich im Datenrahmen einen Farbvektor erstellen? Oder gibt es eine andere Möglichkeit, Kategorien bestimmte Farben zuzuweisen?
factor
, die allen Parzellen gemeinsam ist.fillScale <- scale_fill_manual(name = "grp",values = myColors)
, um dies mit Balkendiagrammen zu verwenden.Ich bin in der gleichen Situation, auf die Malcook in seinem Kommentar hingewiesen hat : Leider funktioniert die Antwort von Thierry nicht mit ggplot2 Version 0.9.3.1.
Hier ist es die erste Figur:
und die zweite Figur:
Wie wir sehen können, bleiben die Farben nicht fest, zum Beispiel wechselt E von Magenta zu Blau.
Wie von Malcook in seinem Kommentar und von Hadley in seinem Kommentar vorgeschlagen,
limits
funktioniert der verwendete Code ordnungsgemäß:gibt die folgende Zahl an, die richtig ist:
Dies ist die Ausgabe von
sessionInfo()
:quelle
Die einfachste Lösung besteht darin, Ihre kategoriale Variable vor der Teilmenge in einen Faktor umzuwandeln. Unter dem Strich benötigen Sie eine Faktorvariable mit genau den gleichen Ebenen in allen Ihren Teilmengen.
Mit einer Zeichenvariablen
Mit einer Faktorvariablen
quelle
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
die Farbe zu erhalten | Faktor Verein aber, was funktioniert, es sei denn, in der Hand, den Tropfen = TRUE wird nicht eingehalten werden (ich erwarte , dass es um den Pegel zu entfernen die Legende). Drat ... oder bin ich es?Dies ist ein alter Beitrag, aber ich habe nach einer Antwort auf dieselbe Frage gesucht.
Warum probieren Sie nicht so etwas wie:
Wenn Sie kategoriale Werte haben, sehe ich keinen Grund, warum dies nicht funktionieren sollte.
quelle
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
zu vermeiden, dass die Ebenen manuell codiert werden müssen.Basierend auf der sehr hilfreichen Antwort von Joran konnte ich diese Lösung für eine stabile Farbskala für einen Booleschen Faktor (
TRUE
,FALSE
) finden.Da ColorBrewer bei binären Farbskalen nicht sehr hilfreich ist, werden die beiden benötigten Farben manuell definiert.
Hier
myboolean
ist der Name der Spalte, inmyDataFrame
der der TRUE / FALSE-Faktor enthalten ist.date
undduration
sind die Spaltennamen, die in diesem Beispiel der x- und y-Achse des Diagramms zugeordnet werden sollen.quelle