Я пытаюсь построить график, используя ggarrange и обычную легенду. Однако цветовая схема и условные обозначения верны только для первого графика.
Если вы посмотрите на график, я знаю, что большая желтая полоса справа - это Lactococcus, однако отображение цвета на уровень отличается между двумя графиками. (Лактококк светло-зеленый в легенде согласно левому графику). Я думал, что позаботился об этом, переупорядочив уровни.
Пожалуйста, дайте мне знать, если я делаю что-то не так или есть лучший способ сделать это. спасибо
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,Time) %>%
summarise_at(vars(colnames(dat.czm)), funs(mean(., 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,rownames(tax_tab1)),ncol(tax_tab1)]))
###
dat.grouped.NoAb<-dat.czm.annot.NoAb %>%
group_by(Diet,Time) %>%
summarise_at(vars(colnames(dat.czm)), funs(mean(., 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,rownames(tax_tab1)),ncol(tax_tab1)]))
##
meanAbund<-as.data.frame(colSums(dat.grouped[,grep("Otu",colnames(dat.grouped))]))
meanAbund$Name<-as.character(tax_tab1[match(rownames(meanAbund),rownames(tax_tab1)),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,meanAbund[rev(order(meanAbund$mean_abund)),"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, 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 No Antibiotics")
ggarrange(PlotNoAb,PlotAb,ncol=2,nrow=1,common.legend = T,legend="bottom")
Я знаю, что это не воспроизводимо. Я пытался создать тестовое подмножество, но у меня проблемы с этим. Надеюсь, кто-нибудь сможет «прочитать» мой сценарий и понять, в чем заключается моя проблема.
спасибо