我创建了一个条形图,每个条形图根据它所属的组进行着色,使用以下代码。
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")
这将生成以下图表
现在,我想要实现的是对条形图的显示顺序进行排序,主要在性别变量上,次要在ID变量上。我在StackExchange上搜索过这里的答案,但据我所知,大多数只处理y变量的排序。
(请注意,这是一个最小的例子,我的真实例子非常庞大。因此,我想找到一种方法来订购我不必要的所有东西,例如,输入每一个手动识别号码。)
答案 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))
这给出了:
作为替代方案,您也可以使用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))
给出: