Zacząłem nabierać prędkości z R w ostatnim miesiącu.
Oto moje pytanie:
Jaki jest dobry sposób przypisywania kolorów do zmiennych kategorialnych w ggplot2, które mają stabilne mapowanie? Potrzebuję spójnych kolorów w zestawie wykresów, które mają różne podzbiory i różną liczbę zmiennych kategorialnych.
Na przykład,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
gdzie categoricalData
ma 5 poziomów.
I wtedy
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
gdzie categoricalData.subset
ma 3 poziomy.
Jednak określony poziom w obu zestawach będzie miał inny kolor, co utrudnia wspólne odczytywanie wykresów.
Czy muszę utworzyć wektor kolorów w ramce danych? A może jest inny sposób przypisania określonych kolorów do kategorii?
factor
co jest wspólne dla wszystkich działek.fillScale <- scale_fill_manual(name = "grp",values = myColors)
aby użyć tego z wykresami słupkowymi.Jestem w takiej samej sytuacji wskazał malcook w swoim komentarzu : niestety odpowiedź przez Thierry nie działa z wersją 0.9.3.1 ggplot2.
Oto pierwsza cyfra:
a druga cyfra:
Jak widać, kolory nie pozostają niezmienne, na przykład E przełącza się z magenty na niebieski.
Jak zasugerował malcook w swoim komentarzu i hadley w swoim komentarzu, kod, który używa,
limits
działa poprawnie:podaje następujący rysunek, który jest poprawny:
Oto wynik
sessionInfo()
:źródło
Najłatwiejszym rozwiązaniem jest przekonwertowanie zmiennej kategorialnej na czynnik przed podzestawieniem. Podsumowując, potrzebujesz zmiennej czynnikowej z dokładnie tymi samymi poziomami we wszystkich podzbiorach.
Ze zmienną znakową
Ze zmienną czynnikową
źródło
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
aby zachować kolor | stowarzyszenie czynnik, ale który działa, z wyjątkiem, w moich rękach, ten spadek = PRAWDA jest NIE przestrzegane (I oczekiwać, że aby usunąć z poziomu legenda). Drat ... czy to ja?To jest stary post, ale szukałem odpowiedzi na to samo pytanie,
Dlaczego nie spróbować czegoś takiego:
Jeśli masz wartości kategoryczne, nie widzę powodu, dla którego to nie powinno działać.
źródło
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
aby uniknąć konieczności ręcznego kodowania poziomów.Na podstawie bardzo pomocnej odpowiedzi jorana udało mi się wymyślić to rozwiązanie dla stabilnej skali kolorów dla współczynnika boolowskiego (
TRUE
,FALSE
).Ponieważ ColorBrewer nie jest zbyt pomocny w przypadku binarnych skal kolorów, dwa potrzebne kolory są definiowane ręcznie.
Oto
myboolean
nazwa kolumnymyDataFrame
zawierającej współczynnik PRAWDA / FAŁSZ.date
iduration
są nazwami kolumn, które mają być odwzorowane na osie X i Y wykresu w tym przykładzie.źródło