How do you order the fill-colours within ggplot2 geom_bar
ggplot2, graphics, r
Solution
You need to specify the `order` aesthetic as well.
ggplot(data,aes(mon,NG,fill=gclass,order=gclass))+
geom_bar(stat="identity")
This may or may not be a bug.
Problem
I am calling the ggplot function ``` ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity") ``` The result is a barplot with bars filled by various colours corresponding to category. However the ordering of the colours is not consistent from bar to bar. Say there is pink, green and blue. Some bars go pink,green,blue from bottom to top and some go green,pink,blue. I don't see any obvious pattern. How are these orderings chosen? How can I change it? At the very least, how can I make ggplot choose a consistent ordering? The class of (x,y and category) are (integer,numeric and factor) respectively. If I make category an ordered factor, it does not change this behavior. Anyone know how to fix this? Reproducible example: ``` data <- data.frame( mon = c( 9L, 10L, 11L, 10L, 8L, 7L, 7L, 11L, 9L, 10L, 12L, 11L, 7L, 12L, 8L, 12L, 9L, 7L, 9L, 10L, 10L, 8L, 12L, 7L, 11L, 10L, 8L, 7L, 11L, 12L, 12L, 9L, 9L, 7L, 7L, 12L, 12L, 9L, 9L, 8L ), gclass = ordered(c( "Up-Up", "Down-Down", "Up-Stable", "Stable-Up", "Stable-Down", "Stable-Down", "Down-Up", "Stable-Up", "Down-Stable", "Stable-Down", "Down-Down", "Down-Down", "Stable-Stable", "Up-Down", "Down-Down", "Stable-Up", "Up-Stable", "Stable-Up", "Stable-Down", "Up-Down", "Up-Stable", "Up-Down", "Up-Up", "Up-Stable", "Down-Up", "Stable-Stable", "Up-Up", "Down-Stable", "Up-Down", "Down-Up", "Stable-Stable", "Stable-Stable", "Up-Down", "Up-Down", "Up-Up", "Down-Stable", "Stable-Down", "Down-Down", "Down-Up", "Up-Stable" )), NG = c( 222614.67, 9998.17, 351162.2, 37357.95, 4140.48, 1878.57, 553.86, 40012.25, 766.52, 15733.36, 90676.2, 45000.29, 0, 375699.84, 2424.21, 93094.21, 120547.69, 291.33, 1536.38, 167352.21, 160347.01, 26851.47, 725689.06, 4500.55, 10644.54, 75132.98, 42676.41, 267.65, 392277.64, 33854.26, 384754.67, 7195.93, 88974.2, 20665.79, 7185.69, 45059.64, 60576.96, 3564.53, 1262.39, 9394.15 ) ) ggplot(data, aes(mon, NG, fill = gclass)) + geom_bar(stat = "identity") ```