a6_phyloseq进化树可视化学习
wentao
2019年5月16日
phyloseq使用plot_tree函数可视化进化树
使用数据
library("phyloseq")
data("esophagus")
data("GlobalPatterns")
为求可重复,此处显示版本号
packageVersion("phyloseq")
## [1] '1.26.1'
library("ggplot2"); packageVersion("ggplot2")
## [1] '3.1.0'
本数据集数的节点标签很奇怪,是数字
这里将标签更改为使用前四个字符
head(phy_tree(GlobalPatterns)$node.label, 10)
## [1] "" "0.858.4" "1.000.154" "0.764.3" "0.995.2"
## [6] "1.000.2" "0.943.7" "0.971.6" "0.766" "0.611"#
phy_tree(GlobalPatterns)$node.label = substr(phy_tree(GlobalPatterns)$node.label, 1, 4)
很多otu 因此我们过滤otu,这里随便取五十个
ntaxa(GlobalPatterns)
## [1] 19216
physeq = prune_taxa(taxa_names(GlobalPatterns)[1:50], GlobalPatterns)
phyloseq使用的是ggplot包做的tree
我本来以为是geom_tree,但是阅读源码之后才发现是segment。 这里使用tree_layout将tree转化为segment对象,并且按照横线和竖线两种类型组装成进化树
treeSegs <- tree_layout(phy_tree(physeq), ladderize = FALSE)#这是构建进化树的基础构建segment对象
head(treeSegs)## $edgeDT
## V1 V2 edge.length OTU xleft xright y x label
## 1: 53 1 0.00892 549322 0.14065 0.14957 1.000000 NA <NA>
## 2: 53 2 0.01408 522457 0.14065 0.15473 2.000000 NA <NA>
## 3: 52 3 0.16022 951 0.01869 0.17891 3.000000 NA <NA>
## 4: 55 4 0.08976 244423 0.09714 0.18690 4.000000 NA <NA>
## 5: 56 5 0.04868 586076 0.11496 0.16364 5.000000 NA <NA>
## 6: 57 6 0.05042 246140 0.12684 0.17726 6.000000 NA <NA>
## 7: 59 7 0.01921 143239 0.20325 0.22246 7.000000 NA <NA>
## 8: 59 8 0.01184 244960 0.20325 0.21509 8.000000 NA <NA>
## 9: 60 9 0.03307 255340 0.19195 0.22502 9.000000 NA <NA>
## 10: 61 10 0.01909 144887 0.21684 0.23593 10.000000 NA <NA>
## 11: 61 11 0.02494 141782 0.21684 0.24178 11.000000 NA <NA>
edgeMap = aes(x = xleft, xend = xright, y = y, yend = y)
vertMap = aes(x = x, xend = x, y = vmin, yend = vmax)
p = ggplot(data = treeSegs$edgeDT) + #geom_segment(edgeMap) +
geom_segment(vertMap, data = treeSegs$vertDT)
p
p = ggplot(data = treeSegs$edgeDT) + geom_segment(edgeMap)
p
p = ggplot(data = treeSegs$edgeDT) + geom_segment(edgeMap) +
geom_segment(vertMap, data = treeSegs$vertDT)
p
### 然后将修改主题,几乎将所有线都去掉treetheme <- theme(axis.ticks = element_blank(), axis.title.x = element_blank(),
axis.text.x = element_blank(), axis.title.y = element_blank(),
axis.text.y = element_blank(), panel.background = element_blank(),
panel.grid.minor = element_blank(), panel.grid.major = element_blank())
p + treetheme
ggplot绘制进化树geom_tree,ggrree更加快捷方便并完善绘制进化树
library("phyloseq")
library("ggtree")
tree <- phy_tree(physeq)
ggplot(tree, aes(x, y)) + geom_tree() + theme_tree()
ggtree(tree, color="firebrick", size=1, linetype="dotted")
ggtree(tree, ladderize=FALSE)
默认可视化
这里的黑点表示OTU在样品的含量
plot_tree(physeq)
去除黑点
plot_tree(physeq, "treeonly")
### 去除节点标签plot_tree(physeq, "treeonly", nodeplotblank)
### 选择树枝排布方案plot_tree(physeq, "treeonly", nodeplotblank, ladderize="left")
plot_tree(physeq, "treeonly", nodeplotblank, ladderize=TRUE)
添加OTU名称为节点名称
plot_tree(physeq, nodelabf=nodeplotblank, label.tips="taxa_names", ladderize="left")
添加进化分支数字
BOOTSTRAP值即自展值,可用来检验所计算的进化树分支可信度。Bootstrap几乎是构建系统进化树一个必须的选项。一般Bootstrap的值>70%,则认为构建的进化树较为可靠。如果Bootstrap的值太低,则有可能进化树的拓扑结构有错误,进化树是不可靠的。
plot_tree(physeq, "anythingelse")
### 使用颜色将黑点区分开样品plot_tree(physeq, nodelabf=nodeplotboot(), ladderize="left", color="SampleType")
按照注释对节点进行上色
plot_tree(physeq, nodelabf=nodeplotboot(), ladderize="left", color="Class")
### 形状代表OTU不同注释 颜色代表不同样品 nodelabf=nodeplotboot()参数去除支节点标签 关于支节点标签设置使用参数nodelabf,有三个选项 nodeplotdefault(全部添加),nodeplotboot(设置范围部分添加),nodeplotblank(不添加)plot_tree(physeq, nodelabf=nodeplotboot(), ladderize="left", color="SampleType", shape="Class")
### 两种策略处理进化树分支置信度# The default
plot_tree(physeq, color="SampleType", ladderize="left")
### Special bootstrap label# Special bootstrap label
plot_tree(physeq, nodelabf=nodeplotboot(), color="SampleType", ladderize="left")
设定范围
# Special bootstrap label with alternative thresholds
plot_tree(physeq, nodelabf=nodeplotboot(80,0,3), color="SampleType", ladderize="left")
### 叶节点标签plot_tree(physeq, nodelabf=nodeplotboot(80,0,3), color="SampleType", label.tips="taxa_names", ladderize="left")
### 更改展示类型data(esophagus)
plot_tree(esophagus, color="Sample", ladderize="left") + coord_polar(theta="y")
### 同时对叶节点的颜色和形状属性进行设置plot_tree(physeq, nodelabf=nodeplotboot(60,60,3), color="SampleType", shape="Class", ladderize="left") + coord_polar(theta="y")
### 设置题目plot_tree(esophagus, title="Default tree.")
### 设置展示methodplot_tree(esophagus, "treeonly", title="method = \"treeonly\"")
按照丰度设置叶节点大小
plot_tree(esophagus, size="abundance")
同时设置按照样品填充叶节点颜色
plot_tree(esophagus, size="abundance", color="samples")
### 控制叶节点整体大小plot_tree(esophagus, size="abundance", color="samples", base.spacing=0.01)
将丰度信息加到叶节点内
plot_tree(esophagus, size="abundance", color="samples", base.spacing=0.03, min.abundance=3)