Graphlan可视化进化树
撰文:文涛 南京农业的大学
责编:刘永鑫 中科院遗传发育所
GraPhlAn简介
总体来讲,Graphlan是一个可视化进化树和基于分类等级绘制层级分类树的工具。可以制作分类树是它不同于R包ggtree和iTOL的地方。然就进化树而言,iTOL功能最为全面,ggtree最容易上手,从功能上来讲graphlan很多地方不如iTOL,比如,iTOL无限制添加的数据集,外环可以制作各种图形包括箱线图等,可以使用多种符号填充外环,但是Graphlan就不能这么随便了,只能使用两个符号填充外环。再多的环属性也就是设置环数量和颜色,透明度了。ggtree最容易上手,但是就一张圈图来说,它不能添加除了热图以外的其他图形,但是在非圈图的模式下,可以对多种数据进行合并,方法将更为简单,操作也容易一些。
素颜vs美化
![113e0ad4cf5e3642b75a9bffccc78250.png](https://i-blog.csdnimg.cn/blog_migrate/c95ff32dcf4d03cfd1861768ea7e9f48.jpeg)
下面通过我们的实战,将这个原始的图形通过graphlan大法,改变到下面的样子
![adc82ad6ccde9c746e6956e0f868948e.png](https://i-blog.csdnimg.cn/blog_migrate/f0a83be4561217ef81e7a38e6a8ef8e4.jpeg)
![b4aced6d86db33eea0e031e785115599.png](https://i-blog.csdnimg.cn/blog_migrate/c56a4d077dfda784eece585447a7836f.jpeg)
![88b75a0e2591002d54fd601ea8c6f286.png](https://i-blog.csdnimg.cn/blog_migrate/1871a7b396cfbb2644f0461bf9db8818.jpeg)
完全认不出来了吧,这就是美颜的重要性。
认识软件参数
参数虽多,你也不需要记住,只要认识即可,而且都是字面意思,懂英文看一遍全懂了,需要时可以来查。大多时间我们是在别人基础上修改,能看懂代码即可。
熟悉grahlan注释参数-全局参数,一般全局参数使用方式为:参数名 + 参数值
分支控制,一般不做控制
branch_bracket_depth 0##控制一个分支块的聚集程度,值越大,树枝越集中
branch_bracket_width 0 0###控制一个分支点延伸出来的分支线的长度,设定大了会反向延长超多分支点。
annotation_background_alpha :只能设置全部的阴影的透明度
组合命令控制注释阴影的半径
一下两个指标设置为负值,且两者均设置为-0.7,会大大减小注阴影半径
annotation_background_separation -0.40
annotation_background_offset -0.34
一般全局参数
title:设置图片题目
title_font_size:60 题目字体大小
total_plotted_degrees 350:这个设置整个圆圈的展看角度,不会设置超过360度,一般设置一个比360度小一点的值是为了添加标签使用(例如:对环添加标签ring_label)。
start_rotation 270:对圆圈图进行旋转的起始位置;注意图形下方为270°,左方为0°。
class_legend_font_size 图例大小设置
## 全局注释
annotation_background_alpha 0.02:全部注释背景透明度;
annotation_background_width 0.03 注释背景宽度
annotation_font_size:设置注释字体大小
annotation_legend_font_size 设置图上容不下时,代表字母的对应注释的字体大小
branch_thickness:全局树枝的粗细设置
branch_color :设置全局树枝颜色
ignore_branch_len 10:控制全局树伸展和大小
clade_marker_size:全局的点的尺寸
clade_marker_edge_width:全局的点的边缘宽度
clade_separation 0.5 进化树分枝簇的紧凑程度
ring_internal_separator_thickness 0.01 设置环与环之间的厚度
ring_separator_color :设置环间隔的颜色,结合厚度设置选项增多
ring_width:设置在这个环上每个点所占有的宽度;
ring_height:设置环与环之间的距离,默认环与环之间的距离为1;
ring_shape:对分类树外面每层的空间设置形状填充,有不多的中形状可以选择。v:正v字型;^:v字型;
ring_alpha 0.01:这是对每个叶节点占据的位置不透明度,最大值为1。值越高颜色越深,当然需要结合设置颜色ring_color
ring_color:每条环的颜色
设置全局的环参数,必须建立在叶节点对应的shape上,不可只设置全局参数,尤其是全局ring color,仅仅设置该参数是无法进行全环上色的。默认节点shape是R,也就是整个叶节点对应的方块。
节点基本参数
节点参数使用方式: 节点名称 + 参数名称 + 参数值
#节点基本参数
clade_marker_size 节点的大小,从1到200都可以设置
clade_marker_color:颜色:默认无色,r:红色;b:蓝色(基本为颜色首字母)
clade_marker_shape:形状:默认圆形,*:代表五角星,h:代表六边形
clade_marker_label:设置点内部写一个标签,后面跟上标签内容
clade_marker_font_color:设置点内标签的字体颜色
clade_marker_edge_color #555555 控制节点的颜色
clade_marker_edge_width 1.2#节点的边的宽度
节点对应的形状
这些标签有我们熟悉的点,圈,各个方向的三角,五边形,五角星,钻石等。具体符号和对应名称如下:
'.' : point marker
',' : pixel marker
'o' : circle marker
v' : triangle_down marker
'^' : triangle_up marker
''>' : triangle_right marker
'1' : tri_down marker
'2' : tri_up marker
'3' : tri_left marker
'4' : tri_right marker
's' : square marker
'p' : pentagon marker
'*' : star marker
'h' : hexagon1 marker
'H' : hexagon2 marker
'+' : plus marker
'x' : x marker
'D' : diamond marker
'd' : thin_diamond marker
'|' : vline marker
'_' : hline marker
节点注释
#节点注释
annotation_background_color
annotation_background_alpha 0.02:注释背景透明度;
annotation_background_width 0.03 注释背景宽度
annotation_font_size:设置注释字体大小
annotation_legend_font_size设置图上容不下,设置成代表字母的对应注释的注释字体大小
枝条参数
branch_thickness 枝条的厚度
branch_color 枝条颜色
branch_color_from_ancestor:使用上级分支的颜色
环参数
ring_internal_separator_thickness 0.01 设置环与环之间的厚度
ring_separator_color :设置环间隔的颜色,结合厚度设置选项增多
ring_width:设置在这个环上每个点所占有的宽度;
ring_heigh:设置环与环之间的距离,默认环与环之间的距离为1;
ring_shape:对分类树外面每层的空间设置形状填充,有不多的形状可以选择。v:正v字型;^:^字型;
ring_alpha 0.01:这是对每个叶节点占据的位置不透明度,最大值为1。值越高颜色越深,当然需要结合设置颜色ring_color
ring_color:每条环的颜色
进化树实战
使用材料
我们使用已经做好的16s序列构建的进化树(由Fastree生成,一般为rep_set.tree)
对应OTU的丰度表格和注释文件,分别为otu_table.txt和rep_seqs_tax.txt,有时可能两者存于同一文件内;
实验设计,即样本对应属性,如分组信息(可选)。
分析要求
做一张进化树,并将不同门的OTU节点标注不同的颜色和形状
对不同的门的OTU添加不同颜色的阴影(低透明度颜值高)。
根据每个样品的OTU丰度使用不同颜色,添加外环。
全部样品分为两个组,根据OTU在两个组中的丰度信息添加不同的标签环
进行差异分析,添加外环对差异OTU根据其分组进行上色并标注。
将OTU总体丰度通过最外环高度展示出来。
构建OTU丰度和物种文件说明
上面我们见过软件的参数,每个节点都要注释,如果手动搞,可能真要3天至半个月画个美颜树。只要是批量操作且有规律,我们就可以用编程来实现。
使用R语言构造注释文件,这里我们明确,基于GraPhlAn的注释文件按照注释占有列数量我分为一下三个部分:
占两列的注释:题目,全局参数,例如,全局点和枝参数
占三列注释:叶,枝参数,全局环参数。图例参数
占四列参数:环参数
由于注释文件编写耗费很大时间,Excel适合编写的也仅仅只有占两列的数据,和总环的参数。这部分编写完成之后每次绘图基本只根据不同的实验,会小范围修改。参考模板:annot1.txt
首先根据之前要求,准备要处理文件
并确定工作目录包括所需的OTU表、物种注释、实验设计等文件,文件名与代码中不对应请自行修改。
测试数据和代码下载链接,后台回复“graphlan”获取
准备需要展示的数据
OTU表和实验设计的读取、交叉筛选和标准化
# 读取OTU表
otu = read.table("otu_table.txt