导出qiime2的树文件和taxonomy文件,并用ggtree
2019-10-15 本文已影响0人
吴十三和小可爱的札记
跟着 qiime2官方文档 做完去噪和聚类后得到两个文件:table.qza(feature table), rep-seqs.qza(represent sequence)。本来想用ggtree美化一下树,发现tip.lab是qiime2的hash码,没有太多信息可读。于是捣鼓了下,不知道理解有没有错。
- 根据丰度过滤feature table
qiime feature-table filter-features \
--i-table table.qza \
--p-min-frequency 5000 \
--o-filtered-table filtered-table.qza </pre>
- 根据过滤后的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>
- 用过滤后的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>
- 用过滤后的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>
- 数据导出
qiime tools export --input-path rooted-tree.qza --output-path ~/out-tree
qiime tools export --input-pathtaxonomy.qza --output-path ~/out-tree
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