如何更改ggplot2分面的顺序

8

我有一个名为“pd.long”的数据框,结构如下:

> str(pd.long)
'data.frame':   144 obs. of  3 variables:
$ Site   : Factor w/ 12 levels "BED","BEU","EB",..: 8 9 10 3 11 1 6 7 5 4 ...
$ Month  : Factor w/ 12 levels "Dec","Jan","Feb",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Density: int  20 20 20 20 20 20 20 20 20 20 ...

我用这段代码构建了条形图:

ggplot(pd.long, aes(x=Month, y=Density, fill=Site))+
geom_bar(stat = "identity", position = "dodge", fill = "darkgray")+
xlab("Month") + ylab("Number")+
facet_wrap(~Site, nrow = 3, scales = "free")

以下是图形展示:

一切都很顺利,直到我发现变量“Site”的级别不按照我的选择排序。ggplot按字母顺序排序,如下所示:

pd.long$Site
Levels: BED BEU EB KAD KAU KB KER KOA KOB KOO PNS RO

然而,我希望它们按照出现在变量列中的顺序排列。

KOA KOB KOO EB  PNS BED KB  KER KAU KAD RO  BEU

任何帮助都将不胜感激。谢谢。

2
你可能会发现 forcats 函数中的 fct_inorder 很有用。 - aosmith
1个回答

15

重新排列因数

pd.long$Site <- factor(pd.long$Site,levels=c("KOA","KOB","KOO","EB","PNS","BED","KB","KER","KAU","KAD","RO","BEU"))

或者更一般化的回答是基于在Site列中第一次出现的顺序:

pd.long$Site <- factor(pd.long$Site,levels=unique(pd.long$Site))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接