如何根据分组变量对ggplot中的结果进行排序

时间:2014-10-05 10:18:39

标签: r ggplot2 bar-chart

我创建了一个条形图,每个条形图根据它所属的组进行着色,使用以下代码。

library("ggplot2")
df <- data.frame(ID=c(5,2,3,6,1,4),Score=c(24.8,33.2,55.21,19.21,41.99,15.23),Gender=c("Man","Woman","Woman","Man","Man","Woman"))
ggplot(df, aes(x=ID, y=Score, color=Gender)) + geom_bar(stat="identity")

这将生成以下图表

enter image description here

现在,我想要实现的是对条形图的显示顺序进行排序,主要在性别变量上,次要在ID变量上。我在StackExchange上搜索过这里的答案,但据我所知,大多数只处理y变量的排序。

(请注意,这是一个最小的例子,我的真实例子非常庞大。因此,我想找到一种方法来订购我不必要的所有东西,例如,输入每一个手动识别号码。)

1 个答案:

答案 0 :(得分:7)

你可以使用interaction来做到这一点(为了更好地区分男人和女人,我用fill代替color):

ggplot(df, aes(x=interaction(ID,Gender), y=Score, fill=Gender)) + 
  geom_bar(stat="identity") +
  scale_x_discrete("ID",breaks=interaction(df$ID,df$Gender),labels=df$ID) +
  theme_bw() +
  theme(axis.title = element_text(size=14,face="bold"), axis.text = element_text(size=12))

这给出了: enter image description here


作为替代方案,您也可以使用facetting:

ggplot(df, aes(x=factor(ID), y=Score, fill=Gender)) + 
  geom_bar(stat="identity") +
  scale_x_discrete("ID",breaks=df$ID,labels=df$ID) +
  facet_grid(.~Gender, scales="free_x") +
  guides(fill=FALSE) + theme_bw() +
  theme(axis.title=element_text(size=14,face="bold"), axis.text=element_text(size=12),
        strip.text=element_text(size=12,face="bold"), strip.background=element_rect(fill=NA,color=NA))

给出: enter image description here