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

Spe*_*osa 2 r bar-chart ggplot2

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

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")
Run Code Online (Sandbox Code Playgroud)

这会生成以下图表

在此输入图像描述

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

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

Jaa*_*aap 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))
Run Code Online (Sandbox Code Playgroud)

这给了: 在此输入图像描述


作为替代方案,您还可以使用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))
Run Code Online (Sandbox Code Playgroud)

这使: 在此输入图像描述