美文网首页microbiomeggplot2绘图基因组数据绘图
R可视化:组间微生物代谢通路

R可视化:组间微生物代谢通路

作者: 生信学习者2 | 来源:发表于2021-08-18 22:24 被阅读0次

前言

组间微生物富集代谢通路常用reporter score表示,在得到reporter score结果后,我们常需要可视化其结果。更多知识分享请到 https://zouhua.top/

Importing data

library(dplyr)
library(tibble)
library(ggplot2)
library(xlsx)

grp <- c("ET_B", "ET_P")
grp.col <- c("#FF6000", "#0080C0")
stg <- c("Before", "After")
stg.col <- c("#6288BA", "#C25D97")

phen <- read.csv("phenotype.csv") 
stg.path <- read.xlsx("reporter_score.20181114.xlsx", sheetIndex = 1)
bp.path <- read.xlsx("reporter_score.20181114.xlsx", sheetIndex = 3)

Function

ScoreVisuStage <- function(x, cfg, num=1){
  idx <- c("Pathway", "Level2", "Description")
  
  if (num==1) {
    level <- c("Amino_Acid_Metabolism","Carbohydrate_Metabolism",
               "Energy_Metabolism", 
               "Membrane_Transport","Xenobiotics_Biodegradation_and_Metabolism",
               "Metabolism_of_Cofactors_and_Vitamins")
  } else {
    level <- c("Amino_Acid_Metabolism","Carbohydrate_Metabolism",
               "PTS","Xenobiotics_Biodegradation_and_Metabolism",
               "Membrane_Transport",
               "Metabolism_of_Cofactors_and_Vitamins", "Energy_Metabolism")
  }
  
  if (cfg=="Before"){
    tmp <- x[ ,c(1:4)] %>% setNames(c(idx, "Reportscore"))
    
  } else {
    tmp <- x[ ,c(1:3, 5)] %>% setNames(c(idx, "Reportscore"))
  }
  
  dat <- tmp %>% filter(Level2 %in% level) %>% 
               filter(Reportscore < -1.96 | Reportscore > 1.96)
  dat.z <- dat %>% select(c(idx, grep("score", colnames(dat)))) %>%
           setNames(c(idx, "ET_B vs ET_P")) %>%
           tidyr::gather(Group, Reporter, -idx) %>%
           mutate(newdir=ifelse(Reporter < 0, grp[2], grp[1])) %>%
           mutate(Group=factor(Group, 
             levels = c("ET_B vs ET_P"))) 
  
  ord_aa <- dat.z %>% filter(Group %in% "ET_B vs ET_P") %>%
            arrange(Reporter, Level2) 
  
  dat.z$Description <- factor(dat.z$Description, levels = ord_aa$Description)
  dat.z$Level2 <- factor(dat.z$Level2, levels = level)
  dat.z$newdir <- factor(dat.z$newdir, levels=grp)  
  return(
    ggplot(dat.z, aes(y=Description, x=Reporter, color=newdir))+ 
    geom_segment(xend=0, aes(yend=Description), size=3)+
    geom_vline(xintercept = 0)+
    geom_vline(xintercept = c(-1.96,1.96), linetype="dashed", color="grey50")+
    facet_grid(Level2 ~ Group, scales = "free", space = "free_y")+
    theme_bw()+
    scale_color_manual(values = rev(grp.col),
                       labels = grp)+
    labs(x="Reporter score", y="")+
    scale_x_continuous(breaks=seq(-6, 6, 2),
                       limits=c(-6.1, 6.1))+
    theme(panel.grid.major = element_blank(),
          panel.grid.minor.x = element_blank(),
          legend.position = "NA",
          strip.text.y = element_blank(),
          axis.title = element_text(size=9, color="black", face="bold"),
          strip.text = element_text(size=10, color="black", face="bold"),
          axis.text = element_text(size=8, color="black"))
  )
}

# groups 
ScoreVisuBP <- function(x, cfg, num=1){
  idx <- c("Pathway", "Level2", "Description")
  
  if (num==1) {
    level <- c("Amino_Acid_Metabolism","Carbohydrate_Metabolism",
               "Energy_Metabolism", 
               "Membrane_Transport","Xenobiotics_Biodegradation_and_Metabolism",
               "Metabolism_of_Cofactors_and_Vitamins")
  } else {
    level <- c("Amino_Acid_Metabolism","Carbohydrate_Metabolism",
               "PTS","Xenobiotics_Biodegradation_and_Metabolism",
               "Membrane_Transport",
               "Metabolism_of_Cofactors_and_Vitamins", "Energy_Metabolism")
  }
  
  if (cfg=="B"){
    tmp <- x[ ,c(1:4)] %>% setNames(c(idx, "Reportscore"))
    
  } else {
    tmp <- x[ ,c(1:3, 5)] %>% setNames(c(idx, "Reportscore"))
  }
  
  dat <- tmp %>% filter(Level2 %in% level) %>% 
               filter(Reportscore < -1.96 | Reportscore > 1.96)
  dat.z <- dat %>% select(c(idx, grep("score", colnames(dat)))) %>%
           setNames(c(idx, "Baseline vs After")) %>%
           tidyr::gather(Group, Reporter, -idx) %>%
           mutate(newdir=ifelse(Reporter < 0, stg[1], stg[2])) %>%
           mutate(Group=factor(Group, 
             levels = c("Baseline vs After"))) 
  
  ord_aa <- dat.z %>% filter(Group %in% "Baseline vs After") %>%
            arrange(Reporter, Level2) 
  
  dat.z$Description <- factor(dat.z$Description, levels = ord_aa$Description)
  dat.z$Level2 <- factor(dat.z$Level2, levels = level)
  dat.z$newdir <- factor(dat.z$newdir, levels=stg)
  return(
    ggplot(dat.z, aes(y=Description, x=Reporter, color=newdir))+ 
    geom_segment(aes(yend=Description),xend=0, size=3)+
    geom_vline(xintercept = 0)+
    geom_vline(xintercept = c(-1.96,1.96), linetype="dashed", color="grey50")+
    facet_grid(Level2 ~ Group, scales = "free", space = "free_y")+
    theme_bw()+
    labs(x="Reporter score",
         y="")+
    scale_x_continuous(breaks=seq(-6, 6, 2),
                       limits=c(-6.1, 6.1))+
    scale_color_manual(values = stg.col,
                       labels = stg)+  
    theme(panel.grid.major = element_blank(),
          panel.grid.minor.x = element_blank(),
          legend.position = "NA",
          strip.text.y = element_blank(),
          axis.title = element_text(size=9, color="black", face="bold"),
          strip.text = element_text(size=10, color="black", face="bold"),
          axis.text = element_text(size=8, color="black"))
  )
}

Run

  • Pathway in Stage
ScoreVisuStage(stg.path, "Before", 1)
  • Pathway in Group
ScoreVisuBP(bp.path, "B", 1)

参考

参考文章如引起任何侵权问题,可以与我联系,谢谢。

相关文章

网友评论

    本文标题:R可视化:组间微生物代谢通路

    本文链接:https://www.haomeiwen.com/subject/fbmnbltx.html