我正在尝试使用ggarrange和常见的图例制作图形。 但是,配色方案和图例仅对第一张图正确。
如果您查看该图,我知道右边的大黄条是乳球菌,但是两个图之间的颜色到级别的映射是不同的(如左图所示,乳球菌在图例中为浅绿色)。我以为我通过重新排列级别来解决这个问题。
如果我做错了什么,或者有更好的方法,请告诉我。谢谢
dat.czm.annot<-merge(dat.czm,metadata,by.x="row.names",by.y="SampleID")
##
dat.czm.annot.Ab<-subset(dat.czm.annot,Antibiotics=="Antibiotics")
##
dat.czm.annot.NoAb<-subset(dat.czm.annot,Antibiotics=="None")
## before separating Ab and NoAb find totals and overall top10
dat.grouped<-dat.czm.annot %>%
group_by(Diet,Time) %>%
summarise_at(vars(colnames(dat.czm)),funs(mean(.,na.rm=TRUE)))
dat.groupedM<-melt(dat.grouped)
dat.groupedM<-subset(dat.groupedM,Diet != "Control")
dat.groupedM$Level<-as.factor(as.character(tax_tab1[match(dat.groupedM$variable,rownames(tax_tab1)),ncol(tax_tab1)]))
##
dat.grouped.Ab<-dat.czm.annot.Ab %>%
group_by(Diet,na.rm=TRUE)))
dat.groupedM.Ab<-melt(dat.grouped.Ab)
dat.groupedM.Ab<-subset(dat.groupedM.Ab,Diet != "Control")
dat.groupedM.Ab$Level<-as.factor(as.character(tax_tab1[match(dat.groupedM.Ab$variable,ncol(tax_tab1)]))
###
dat.grouped.NoAb<-dat.czm.annot.NoAb %>%
group_by(Diet,na.rm=TRUE)))
dat.groupedM.NoAb<-melt(dat.grouped.NoAb)
dat.groupedM.NoAb<-subset(dat.groupedM.NoAb,Diet != "Control")
dat.groupedM.NoAb$Level<-as.factor(as.character(tax_tab1[match(dat.groupedM.NoAb$variable,ncol(tax_tab1)]))
##
meanAbund<-as.data.frame(colSums(dat.grouped[,grep("Otu",colnames(dat.grouped))]))
meanAbund$Name<-as.character(tax_tab1[match(rownames(meanAbund),ncol(tax_tab1)])
colnames(meanAbund)<-c("mean_abund","Name")
top10_meanAbund<-meanAbund[rev(order(meanAbund$mean_abund))[1:10],]
top10Names<-top10_meanAbund$Name
## used melted dataframe for plotting
## now ordered by mean abundance
dat.groupedM.Ab$Level<-factor(dat.groupedM.Ab$Level,meanAbund[rev(order(meanAbund$mean_abund)),"Name"])
dat.groupedM.NoAb$Level<-factor(dat.groupedM.NoAb$Level,"Name"])
library(RColorBrewer)
n <- length(unique(dat.groupedM$Level))
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',]
col_vector = unlist(mapply(brewer.pal,qual_col_pals$maxcolors,rownames(qual_col_pals)))
set.seed(200)
mycols<-sample(col_vector,n)
##
PlotAb<-ggplot(dat.groupedM.Ab,aes(x = Time,y = value,fill = Level)) +
geom_bar(stat = "identity") +
facet_wrap(~Diet)+
scale_fill_manual(values = mycols,breaks=top10Names) +
theme_bw()+
# labs(fill="top 10 genera")+
ggtitle("Cohort 2 Antibiotics")
## used melted dataframe for plotting
## now ordered by mean abundance
##
PlotNoAb<-ggplot(dat.groupedM.NoAb,breaks=top10Names) +
theme_bw()+
#labs(fill="top 10 genera")+
ggtitle("Cohort 2 No Antibiotics")
ggarrange(PlotNoAb,PlotAb,ncol=2,nrow=1,common.legend = T,legend="bottom")
我知道这是不可复制的。我试图制作一个测试子集,但是我遇到了问题。希望有人可以“阅读”我的脚本并了解我的问题。
谢谢