I am generating a histogram and I would like to color certain groups with specific colors. Here is my histogram:
I have 14 groups and I would like to color the first 7 red, the next 4 blue, and the final 3 orange. How can I do this in ggplot? Thanks.
geom_histogram
. I'm not sure if this constitutes a "bar chart" or a "discrete histogram" - drbunsen 2012-04-04 17:44
fill
. There are some examples in ?geom_bar
- joran 2012-04-04 17:57
geom_bar
. I thought there was probably a way to use geom_histogram
without the need to define color groupings - drbunsen 2012-04-04 18:05
UPDATED VERSION
No need to specify grouping column, ggplot
command is much more compact.
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)
OLD 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)
geom_histogram(fill=colors)
to be the only way to handle a cumulative histogram aes(y=cumsum(..count../sum(..count..)))
, because setting a fill inside the aes
resulted in groups being stacked. The simpler stat_ecdf
approach didn't work for me because it doesn't take breaks
option. In the end, only this approach worked - PatrickT 2017-12-18 21:36