微生物分析

导出qiime2的树文件和taxonomy文件,并用ggtree

2019-10-15  本文已影响0人  吴十三和小可爱的札记

跟着 qiime2官方文档 做完去噪和聚类后得到两个文件:table.qza(feature table), rep-seqs.qza(represent sequence)。本来想用ggtree美化一下树,发现tip.lab是qiime2的hash码,没有太多信息可读。于是捣鼓了下,不知道理解有没有错。

  1. 根据丰度过滤feature table
qiime feature-table filter-features \
 --i-table table.qza \
 --p-min-frequency 5000 \ 
 --o-filtered-table filtered-table.qza </pre>
  1. 根据过滤后的feature table拿到represent sequence
qiime feature-table filter-seqs \  
 --i-data rep-seqs.qza \
 --i-table filtered-table.qza \
 --o-filtered-data filtered-seqs.qza </pre>
  1. 用过滤后的represent sequence建树
qiime phylogeny align-to-tree-mafft-fasttree \
 --i-sequences filtered-seqs.qza \
 --o-alignment filtered-aligned-seqs.qza \
 --o-masked-alignment filtered-masked-aligned-seqs.qza\
 --o-tree filtered-unrooted-tree.qza \
 --o-rooted-tree filtered-rooted-tree.qza</pre>
  1. 用过滤后的represent sequence进行物种分类
# 下载pre-trained Naive Bayes classifier​
wget \
 -O "gg-13-8-99-515-806-nb-classifier.qza" \
 "https://data.qiime2.org/2019.7/common/gg-13-8-99-515-806-nb-classifier.qza"
​
qiime feature-classifier classify-sklearn \
 --i-classifier gg-13-8-99-515-806-nb-classifier.qza \
 --i-reads filtered-seqs.qza \
 --o-classification taxonomy.qza</pre>
  1. 数据导出
qiime tools export --input-path rooted-tree.qza --output-path ~/out-tree 
​
qiime tools export --input-pathtaxonomy.qza --output-path ~/out-tree 
  1. R读取数据,并用 treeioggtree美化树。
require(readr)
require(treeio)
require(ggtree)
require(tidyr)
require(dplyr)
require(tidytree)

matedata <- read_tsv("...\\taxonomy.tsv")
tree <- read.newick("...\\tree.nwk")​
​
#  由于两个数据的hash码顺序是不同的,需要重排序
#  根据tree数据对matedata排序并重构外部数据
​
match_Tax <- matedata[match(tree$tip.label, matedata$`Feature ID`), ]
df <- data.frame(lable = tree$tip.label, Taxon = match_Tax$Taxon)
df <- separate(df, Taxon, 
               into = c("K", "P", "C","O","F","G", "S"),  sep = ";")
​
#  用%<+传入外部数据,并用Taxon做tiplabel
P_tree <-  ggtree(tree,  aes(color = P), layout  =  "circular") %<+% df + 
# 按照纲对tiplab上色
  geom_tiplab2(aes(label = C), hjust  =  -.1) +
# 利用负号,生成中空的树
  xlim(-0.5, NA) + 
# 限定画布大小?反正避免文字过长无法显示。─=≡Σ(((つ•̀ω•́)つ
  xlim_tree(1.2)
P_tree.png

6.Tips1

treeio的read.newick与read.tree的不同之处是,加入了参数node.label。当node.label存的不是label,而是bootstrap等数字型的时候,你可以传入node.label = ’support’,这样它会把node label解析为support value,另存为树注释数据,而不是和tip label混在一起。这样node label就变成了易于分割的数字型,然后就可以按照Y叔的资料进行分割操作。

1.1.png 1.png
  1. tips2
    假如你的树丢了,图有保存,你还能够取回树,可以写newick或nexus文件出来。
上一篇下一篇

猜你喜欢

热点阅读