2016-10-13 27 views
5

Powiedzmy mam następujący ramkę danych:odstających Kolor wielu czynników w boxplot

library(ggplot2) 

set.seed(101) 
n=10 
df<- data.frame(delta=rep(rep(c(0.1,0.2,0.3),each=3),n), metric=rep(rep(c('P','R','C'),3),n),value=rnorm(9*n, 0.0, 1.0)) 

Moim celem jest, aby zrobić wykres typu boxplot od wielu czynników:

p<- ggplot(data = df, aes(x = factor(delta), y = value)) + 
geom_boxplot(aes(fill=factor(metric))) 

wyjście jest:

enter image description here

Jak dotąd tak dobrze, ale jeśli tak zrobię:

p+ geom_point(aes(color = factor(metric))) 

uzyskać:

enter image description here

Nie wiem, co robi. Moim celem jest pokolorowanie wartości odstających, jak to się dzieje here. Zauważ, że this solution zmienia kolor wnętrza pól na biały i ustawia granicę na różne kolory. Chcę zachować ten sam kolor pudełek, gdy ich wartości dziedziczą te kolory. Chcę wiedzieć, jak sprawić, by te odstające kolory uzyskały te same kolory z ich odpowiednich pól.

+0

można dodać '+ facet_wrap (~ czynnik (metryczny))', ale nie jestem pewien, czy to Cię zadowoli – Mateusz1981

Odpowiedz

3

Czy chcesz tylko zmienić kolor Urządzenie odstających? Jeśli tak, możesz zrobić to łatwo, dwukrotnie rysując boxplot.

p <- ggplot(data = df, aes(x = factor(delta), y = value)) + 
    geom_boxplot(aes(colour=factor(metric))) + 
    geom_boxplot(aes(fill=factor(metric)), outlier.colour = NA) 
             # outlier.shape = 21 # if you want a boarder 

enter image description here

[edited]
colss <- c(P="firebrick3",R="skyblue", C="mediumseagreen") 
p + scale_colour_manual(values = colss) + # outliers colours 
    scale_fill_manual(values = colss)  # boxes colours 

# the development version (2.1.0.9001)'s geom_boxplot() has an argument outlier.fill, 
# so I guess under code would return the similar output in the near future. 
p2 <- ggplot(data = df, aes(x = factor(delta), y = value)) + 
    geom_boxplot(aes(fill=factor(metric)), outlier.shape = 21, outlier.colour = NA) 
+0

To właśnie szukałem . Ale co jeśli chcę ustawić własne kolory dla każdego z nich. Próbowałem 'colss <- c (P =" firebrick3 ", R =" skyblue ", C =" mediumseagreen ")', a następnie wykonaj 'p + scale_fill_manual (values ​​= colss)' i to nie działa. – Nestorghh

+0

@Nestorghh; Pierwsze 'geom_boxplot()' narysuje wartości odstające za pomocą 'aes (color)', a druga rysuje pola (i pokrywają pierwsze pola) za pomocą 'aes (fill)'. Tak więc ta metoda wymaga zarówno 'scale_fill_manual' oraz' scale_colour_manual' do zmiany kolorów pól i wartości odstających. – cuttlefish44

+0

dzięki! Już działa. – Nestorghh

0

Może to:

ggplot(data = df, aes(x = as.factor(delta), y = value,fill=as.factor(metric))) + 
    geom_boxplot(outlier.size = 1)+ geom_point(pch = 21,position=position_jitterdodge(jitter.width=0)) 

enter image description here