2012-04-04 12 views
9

Ich erstelle ein Histogramm und möchte bestimmte Gruppen mit bestimmten Farben färben. Hier ist mein Histogramm:Wie fülle ich manuell Farben in einem Histogramm ggplot2

enter image description here

Ich habe 14 Gruppen und ich würde die ersten 7 rot färben mögen, die nächsten 4 blau, und die letzte 3 Orange. Wie kann ich das in ggplot machen? Vielen Dank.

+0

Ich nehme an, Sie ein Balkendiagramm bedeuten, nicht ein Histogramm? Da ist ein (großer) Unterschied. – joran

+0

Die Daten sind ein Diagramm der Häufigkeit von diskontinuierlichen Daten. Ich habe es mit 'geom_histogram' geplottet. Ich bin mir nicht sicher, ob dies ein "Balkendiagramm" oder ein "diskretes Histogramm" darstellt. – drbunsen

+2

Ok. Ich würde wahrscheinlich nur in diesem Fall geom_bar verwenden. Und dann brauchen Sie nur eine Gruppierungsvariable in Ihrem Datenrahmen, die die gewünschte Farbgruppierung definiert, und ordnen Sie diese dann 'fill' zu. Es gibt einige Beispiele in '? Geom_bar'. – joran

Antwort

12

NEUFASSUNG

Keine Notwendigkeit Gruppierungsspalte angeben, ggplot Befehl ist viel kompakter.

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

alte Version

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

Ich fand den Ansatz '' geom_histogram (fill = colors) '' als einzige Möglichkeit, ein kumulatives Histogramm '' aes (y = cumsum (.. count ../sum (.. count ..))) '' zu handhaben ', weil das Setzen einer Füllung in das' 'aes'' dazu führt, dass Gruppen gestapelt werden. Der einfachere "stat_ecdf" -Ansatz funktionierte bei mir nicht, da er keine "Breaks" -Option benötigt. Am Ende funktionierte nur dieser Ansatz. – PatrickT

Verwandte Themen