ошибка с отображением цвета в двух графиках с общей легендой - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь построить график, используя 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")

enter image description here

Я знаю, что это не воспроизводимо. Я пытался создать тестовое подмножество, но у меня проблемы с этим. Надеюсь, кто-нибудь сможет «прочитать» мой сценарий и понять, в чем заключается моя проблема.

спасибо

...