了解ggplot条形图上的样本顺序

问题描述

请参见下面的编辑

我是来自df的条形图,该df由440行组成,结构如下:

enter image description here

然后,我使用以下代码创建barplot:

ggplot(fplot2,aes(x=SampleID,y=Abundance,fill=Taxon)) +
geom_bar(stat="identity") +
scale_fill_manual(values = Cb64k) +
theme(axis.text.x = element_text(angle=45,hjust=1)) +
coord_cartesian(expand=FALSE) +
xlab("Sample") +
ylab("Abundance") +
facet_wrap(~fplot2$Patient,scales="free_x",nrow=2,ncol=5)

哪个给我这个数字:

enter image description here

我注意到患者人数不正确,因为P_10仅次于P_1。是否可以更改图像,使第一行为P_1至P_5,最低行为P_6至P_10?

我还注意到,对于P_8,样本也有问题,它们应该是P8W0,P8W2,P8W4,P8W12,P8W14。我也可以重新排序吗?

编辑:我通过添加以下方式解决了方面排序的问题:

facet_wrap(~factor(fplot2$Patient,levels=c("P_1","P_2","P_3","P_4","P_5","P_6","P_7","P_8","P_9","P_10")),scales = "free_x",ncol=5)

但是我不确定如何更改P_8样本的顺序

解决方法

也将SampleID转换为factor

ggplot(fplot2,aes(x = factor(SampleID,levels = lvls),y = Abundance,fill = Taxon))

并使用所需顺序显式指定lvls。这是我对图像中轴标签的顺序的最佳猜测:

lvls <- c(
  vapply(1:6,function(x) paste0("P",x,"W",c(0,1,3,6)),character(4L)),paste0("P7W",paste0("P8W",2,4,12,14)),vapply(9:10,character(4L))
)

lvls向量看起来像这样

 [1] "P1W0"  "P1W1"  "P1W3"  "P1W6"  "P2W0"  "P2W1"  "P2W3"  "P2W6"  "P3W0"  "P3W1"  "P3W3"  "P3W6"  "P4W0"  "P4W1"  "P4W3"  "P4W6"  "P5W0"  "P5W1"  "P5W3"  "P5W6"  "P6W0" 
[22] "P6W1"  "P6W3"  "P6W6"  "P7W0"  "P7W3"  "P7W6"  "P8W0"  "P8W2"  "P8W4"  "P8W12" "P8W14" "P9W0"  "P9W1"  "P9W3"  "P9W6"  "P10W0" "P10W1" "P10W3" "P10W6"