你如何订购ggplot2 geom_bar中的填充颜色

我正在调用ggplot函数

ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity") 

其结果是一个带有与各种颜色相对应的各种颜色的酒吧的条形图。 然而,从酒吧到酒吧的颜色sorting并不一致。 说有粉红色,绿色和蓝色。 一些酒吧从底部到顶部变成粉红色,绿色,蓝色,一些变成绿色,粉红色,蓝色。 我没有看到任何明显的模式。

这些订单是如何select的? 我怎样才能改变它? 至less,我怎样才能让ggplotselect一致的顺序?

(x,y和类别)的类别分别是(整数,数字和因子)。 如果我把类别作为一个有序因子,它不会改变这种行为。

有谁知道如何解决这个问题?

可重复的例子:

 dput(data) structure(list(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 = structure(c(9L, 1L, 8L, 6L, 4L, 4L, 3L, 6L, 2L, 4L, 1L, 1L, 5L, 7L, 1L, 6L, 8L, 6L, 4L, 7L, 8L, 7L, 9L, 8L, 3L, 5L, 9L, 2L, 7L, 3L, 5L, 5L, 7L, 7L, 9L, 2L, 4L, 1L, 3L, 8L), .Label = c("Down-Down", "Down-Stable", "Down-Up", "Stable-Down", "Stable-Stable", "Stable-Up", "Up-Down", "Up-Stable", "Up-Up" ), class = c("ordered", "factor")), 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)), .Names = c("mon", "gclass", "NG" ), row.names = c(NA, -40L), class = "data.frame") ggplot(data,aes(mon,NG,fill=gclass))+geom_bar(stat="identity") 

您还需要指定order美学。

 ggplot(data,aes(mon,NG,fill=gclass,order=gclass))+ geom_bar(stat="identity") 

在这里输入图像描述

这可能也可能不是一个错误 。

从ggplot2_2.0.0开始, order美学不再可用。 要获得按填充颜色sorting的堆栈,您可以简单地按照要sorting的分组variables来sorting数据集。

我经常用dplyrarrange这个。 在这里,我通过ggplot调用中的fill因子来sorting数据集,而不是创build一个有序的数据集,但两者都可以正常工作。

 library(dplyr) ggplot(arrange(data, gclass), aes(mon, NG, fill = gclass)) + geom_bar(stat = "identity") 

这很容易在基础R中完成,当然,使用抽取括号的经典order

 ggplot(data[order(data$gclass), ], aes(mon, NG, fill = gclass)) + geom_bar(stat = "identity") 

在这两种情况下所得到的情节现在按照所需的顺序: 在这里输入图像描述

ggplot2_2.2.0更新

在ggplot_2.2.0中,填充顺序是基于因子级别的顺序。 默认顺序将绘制堆栈顶部的第一层而不是底部。

如果你想要在栈底的第一层,你可以在position_stack使用reverse = TRUE 。 注意你也可以使用geom_col作为geom_bar(stat = "identity")快捷方式。

 ggplot(data, aes(mon, NG, fill = gclass)) + geom_col(position = position_stack(reverse = TRUE)) 

您可以使用scale_fill_函数更改颜色。 例如:

 ggplot(dd,aes(mon,NG,fill=gclass)) + geom_bar(stat="identity") + scale_fill_brewer(palette="blues") 

为了在bars获得一致的sorting,您需要订购数据框:

 dd = dd[with(dd, order(gclass, -NG)), ] 

为了改变图例的顺序,改变gclass因子。 所以像这样:

 dd$gclass= factor(dd$gclass,levels=sort(levels(dd$gclass), TRUE)) 

在这里输入图像描述

要订购,您必须使用levels参数并通知订单。 喜欢这个:

 data$gclass (data$gclass2 <- factor(data$gclass,levels=sample(levels(data$gclass)))) # Look the difference in the factors order ggplot(data,aes(mon,NG,fill=gclass2))+geom_bar(stat="identity")