美文网首页生物信息学与算法生物信息学习生物信息学
使用词云可视化微生物丰度:让微生物无处可逃

使用词云可视化微生物丰度:让微生物无处可逃

作者: wentaomicro | 来源:发表于2020-04-20 10:39 被阅读0次
    image

    写在前面

    2020年2月19日,疫情还在继续,相信持续不了多久了。还在假期中,但还是可以持续发光发热的。今天我为大家带来词云,词云这种出图方式实际上再各个领域都有比较广发的引用,尤其是引文分析,广告等。出镜率较高。目前,鲜有再微生物生态学邻域运用到物种和功能可视化方向。直到我使用了MEGAN的可视化界面后,发现使用了这种可视化方式。java的可视化库是十分强大。甚至让我萌生了学习java的冲动。想想还是算啦,不具备这个能力。目前需要的是以最快捷的方式加快计算速度,让R语言中的许多计算过程加速一下。julia的编码风格很简单,于是就转入julia来学习。不讲废话了,代码和解释奉上。

    微生物群落词云绘制

    微生物有七级分类,按照每个分类等级进行词云的绘制,并将加入扩增子的主体流程,实现自动化过程。这里同样使用刘老师的示例数据,也就只需要运行一条代码,即可完成。

    基础词云,用于描述不同分组就某个分类水平绘制词云

    下面我从纲水平绘制微生物群落词云,这条函数会按照分组展示词云,分组列名必须为Group,这一点请大家注意,其他也没什么注意的。

    # 接下来我门绘制门水品的物种词云# j = "Phylum"# j = "Class"# j = "Order"# j =  "Family"# j = "Genus"# 微生物生态-扩增子数据词云# 基础词云,用于描述不同分组就某个分类水平绘制词云result = wordTax(otu = "./otutab.txt",tax = "./taxonomy.txt", map = "./metadata.tsv",j = "Class")# 提取图片p1 = result [[1]]p1
    
    image

    高阶词云

    将全部物种放到一起展示,有时候会因为物种的数据太多,词云太大,影响观看效果,所以运用ggplot分面功能,实现将词云按照分类分开展示。添加参数:facet = TRUE。

    这里我添加保存图片参数,因为图形过大,所以调整limitsize = FALSE。

    # facet模式,用于按照门水平绘制词云,也就是是纵坐标按照门水平分类,横坐标按照分组展示。result = wordTax(otu = "./otutab.txt",tax = "./taxonomy.txt", map = "./metadata.tsv",j = "Family",facet = TRUE)# 提取图片p1 = result [[1]]# 提取作图数据data = result [[2]]#path = getwd()FileName2 <- paste(path,"/word—facet.pdf", sep = "")ggsave(FileName2, p1, width = 12, height =50,limitsize = FALSE)
    
    image

    主体函数

    wordTax = function(otu = "./otutab.txt",tax = "./taxonomy.txt", map = "./metadata.tsv",j = "Phylum",facet = FALSE){        library(tidyverse)  library(ggwordcloud)  library("phyloseq")  #导入otu表格  otu = read.delim(otu,row.names = 1)  head(otu)  otu = as.matrix(otu)  str(otu)  #导入注释文件  tax = read.delim(tax,row.names = 1)  head(tax)  tax = as.matrix(tax)  # taxa_names(tax)    #导入分组文件  map = read.delim(map,row.names = 1)  head(map)    # #导入进化树  # tree = read.tree("./otus.tree")  # tree    ps <- phyloseq(otu_table(otu, taxa_are_rows=TRUE),                 sample_data(map) ,                 tax_table(tax)                 # phy_tree(tree)                   )  ps          ps_sub <- ps %>% tax_glom(taxrank = j) %>% transform_sample_counts(function(x) {x/sum(x)} )  ps_sub  otu_table = as.data.frame(t(vegan_otu(ps_sub  )))    head(otu_table)    # 按照不同分组求取每组平均丰度列表  count = t(otu_table)  count2 = as.data.frame(count)  head(count)  #提取分组文件  sub_design <- as.data.frame(sample_data(ps))    #构造分组  aa = sub_design[,"Group"]  colnames(aa) = "Vengroup"  iris.split <- split(count2,as.factor(aa$Vengroup))    #数据分组计算平均值  iris.apply <- lapply(iris.split,function(x)colMeans(x[]))    # 组合结果  iris.combine <- do.call(rbind,iris.apply)  ven2 = t(iris.combine)  # sum(ven2[,1])#验证一下是否正确  ven2 = as.data.frame(ven2)  head(ven2)  ven2$ID  =row.names(ven2)  # 提取物种注释文件:    vegan_tax <-  function(physeq){    tax <-  tax_table(physeq)        return(as(tax,"matrix"))  }  tax_table = as.data.frame(vegan_tax(ps_sub))  head(tax_table)    # match(row.names(tax_table),ven2$ID) 这是匹配的,所以直接合并    ven3 = cbind(tax_table,ven2)      #数据宽边长  library(reshape2)  plotdata<-melt(ven3,id.vars = c("ID",colnames(tax_table)),                 variable.name='Group',                 value.name='mean')  head(plotdata)    set.seed(42)  p = ggplot(plotdata, aes_string(label = j, size = "mean",color = "Phylum")) +    geom_text_wordcloud() +    scale_size_area(max_size = 15) +    theme_minimal() +    facet_wrap(~Group)  p    if(facet == TRUE){        p = ggplot(plotdata, aes_string(label = j, size = "mean",color = "Phylum")) +      geom_text_wordcloud() +      scale_size_area(max_size = 15) +      theme_minimal() +facet_grid(Phylum~Group)    # facet_wrap(~Group)    p  }      return(list(p,plotdata))}
    

    以上就全部内容,如果运行出现问题可以在后台回复:词云,按照指示得到原始数据和测试代码。

    image

    相关文章

      网友评论

        本文标题:使用词云可视化微生物丰度:让微生物无处可逃

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