2014-10-05 109 views
2

我使用以下代码创建一个条形图,每个条形图根据其所属的组进行着色。如何根据分组变量对ggplot中的结果进行排序

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变量的排序。 (请注意,这是一个最简单的例子,我真正的例子是非常大的,因此,我想找到一种方法来命令我不需要的所有东西,例如,手动输入每个ID号。)

回答

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


作为替代方案,你也可以使用磨制:

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

+1

谢谢!优秀的造型额外的荣誉! – Speldosa 2014-10-05 11:11:56

相关问题