2012-04-04 12 views
9

Generuję histogram i chciałbym pokolorować określone grupy o określonych kolorach. Oto moja histogram:Jak ręcznie wypełnić kolory w histogramie ggplot2

enter image description here

Mam 14 grup i chciałbym pokolorować pierwszych 7 czerwonym, 4 niebieskie, a ostateczną 3 pomarańczowo. Jak mogę to zrobić w ggplot? Dzięki.

+0

Jestem zakładając znaczy działkę bar, a nie histogramu? Istnieje (duża) różnica. – joran

+0

Dane to wykres częstotliwości z nieciągłych danych. Sporządziłem to za pomocą "geom_histogram". Nie jestem pewien, czy stanowi to "wykres słupkowy", czy "dyskretny histogram". – drbunsen

+2

Ok. Prawdopodobnie po prostu użyłbym geom_bar w tym przypadku. A następnie potrzebujesz tylko zmiennej grupującej w ramce danych, która definiuje żądane grupowanie kolorów, a następnie zamienia je na "wypełnij". Istnieje kilka przykładów w '? Geom_bar'. – joran

Odpowiedz

12

zaktualizowana wersja

Nie ma potrzeby, aby określić kolumny grupowania, komenda ggplot jest znacznie bardziej zwarty.

library(ggplot2) 
set.seed(1234) 

# Data generating block 
df <- data.frame(x=sample(1:14, 1000, replace=T)) 
# Colors 
colors <- c(rep("red",7), rep("blue",4), rep("orange",3)) 

ggplot(df, aes(x=x)) + 
    geom_histogram(fill=colors) + 
    scale_x_discrete(limits=1:14) 

enter image description here

starą wersję

library(ggplot2) 

# 
# Data generating block 
# 
df <- data.frame(x=sample(c(1:14), 1000, replace=TRUE)) 
df$group <- ifelse(df$x<=7, 1, ifelse(df$x<=11, 2, 3)) 

# 
# Plotting 
# 
ggplot(df, aes(x=x)) + 
    geom_histogram(data=subset(df,group==1), fill="red") + 
    geom_histogram(data=subset(df,group==2), fill="blue") + 
    geom_histogram(data=subset(df,group==3), fill="orange") + 
    scale_x_discrete(breaks=df$x, labels=df$x) 

enter image description here

+0

Zauważyłem, że podejście "geom_histogram (fill = colours)' 'jest jedynym sposobem radzenia sobie z kumulatywnym histogramem' 'aes (y = cumsum (.. count ../ sum (.. count ..))) ', ponieważ ustawienie wypełnienia wewnątrz' 'aes'' spowodowało ułożenie grup. Prostsze podejście '' stat_ecdf'' nie zadziałało, ponieważ nie wymaga opcji '' break''. W końcu tylko to podejście zadziałało. – PatrickT

Powiązane problemy