1. 开发背景
随着测序技术的不断发展,尤其是三代测序技术的出现,例如PacBio和Nanopore,它们可以产出更长、更准确的测序数据,这使得原本有基因组的物种使用新技术可以得到更完整的基因组。同时相近或者相同物种基因组的比较,也是生物基因组序研究的重点内容,比如SV、PAV等结构变异。
已有的工具例如Circos虽然可以比较漂亮的展示基因组的特性和两个基因组间的差异,但是由于图形使用圆形展示,这会造成一些明显的结构变异在图中没有那么明显。所以我们开发了recos,它使用矩形的方式展示两个基因组的共线性关系,并可以将每个基因组的特性,例如GC、TE、SV、PAV定制到图中展示。
2. 软件下载和安装
第一步:在自己的系统上安装Singularity,可以参考 https://docs.sylabs.io/guides/latest/user-guide/quick_start.html;
第二步:从github下载相关软件,如果安装git,可以之间输入,git clone https://github.com/zhk2017/recos.git 进行下载,或者可以通过进入链接 https://github.com/zhk2017/recos 进行下载,完成后为exe目录下recos添加可执行权限cd exe && chmod 755 recos;
第三步:下载基础镜像,用于提供软件运行环境, https://pan.baidu.com/s/1e54jrCk62SSvFcr8o7tMoA ,提取码:q2e5;
第四步:下载的基础镜像名称为recos.sif,将其保存到img目录下面,img目录位于第二步下载的软件下面;
3. 快速开始
运行Recos只需要配置两个参数一个是-c参数,一个是-o参数。其中-c用于指定配置文件,-o设置输出文件的名称。所有软件对绘图元素布局设置,共线性文件和基因组特性文件的输入只能在配置文件中设置。
$ perl recos_wrapper.pl
Program: recos (plot genomic characteristics and collinearity)
Version: 1.0.6
Contact: Haikuan Zhang <zhk_@hotmail.com>
Usage: perl recos_wrapper.pl -c <ini format config file> -o [output file name]
-c [required] Config file for all settings. Input variant file or plot parameters.
-o [optional] Output file name. [default:genome.comparison].
NOTE:
For non-commercial use only, all rights reserved!
软件下载安装完成后,在tutorials目录下有example1-example7共7个实例数据,方便用户快速开始,用户只需进入对应目录运行sh run.sh即可完成绘图,下面简单介绍这五个例子。
$ ls tutorials/
doc example1 example2 example3 example4 example5 example6 example7
example1:绘制最基本的染色体条带图,不添加任何其他任何图形元素。
#查看示例1中包含那些文件
tutorials/example1 $ ls
example.ini ref_query.list run.sh
example.ini配置文件中各参数含义:
[canvas] #用于定义整个画布的大小、图形方向、图形元素所在的位置和大小等
width = 1100 #画布宽度,像素
height = 300 #画布高度,像素
direction = horizontal #图形元素的方向,水平或垂直
axis_ratio = 0.1 #坐标轴占画布的大小,0.05表示占总大小的5%,举例:如果direction为水平,表示占高度的5%
name_ratio = 0.05 #染色体名称占画布的大小
margin = 10,10,5,20 #画布四周留白的大小,像素
inner_ratio = 0.15,0.2,0.3,0.2,0.15 #每个染色体对占一个区域,里面分为5部分,详见后面对参数的说
[axis]
canvas_position = top #坐标轴在画布中的位置,举例:如果direction为水平,则只能是上或下
ticks_minor = 1Mb #坐标轴中较短刻度的步长
ticks_major = 5Mb #坐标轴较长刻度的步长
ticks_minor_len = -5 #较短刻度的长度,像素,正负值可以调整方向
ticks_major_len = -10 #较长刻度的长度,像素,正负值可以调整方向
axis_line = 0.7 #以坐标轴区域为参考,坐标轴主线在里面的位置,举例:0.5表示居中
axis_color = rgb(0,0,0) #坐标轴颜色
axis_label = 0.2 #以坐标轴区域为参考,刻度标签名称所在位置
axis_label_size = 12 #刻度标签名称的大小,像素
axis_label_color = rgb(0,255,255) #刻度标签名称的颜色
axis_width = 1 #坐标轴线条宽度
axis_opacity = 1 #坐标轴线条透明度
label_unit = Mb #刻度标签名称的单位
[chromosome]
canvas_position = left #展示染色体比较的绘图元素在画布中的位置
chromosome_list = ref_query.list #定义染色体比较关系、条带颜色、染色体长度、透明度、比较ID等
chroms = 2,1,3 #比较ID的列表在chromosome_list定义,设置染色体在图中展示的顺序
name_position = center #染色体名称标签的位置
round = 0 #设置染色体条带两端为圆形,越大弧度越大,默认为0,表示直角
本例中只需要设置配置文件中的chromosome_list参数,该参数指定的文件中记录了染色体的基本信息,该文件只能是10列或者19列,具体每一列的含义,以及是否选填参见下表。当只需要展示一个基因组的特性信息时,填写10列内容即可,对应表格种的1-9列和最后一列;当需要展示两个基因组的比较信息时,该文件需要是19列,文件示例:
Chr01 56831624 12 1 1 0.5 rgb(210,105,30) rgb(210,105,30) rgb(210,105,30) Chr01 59644097 12 1 1 0.5 rgb(95,158,160) rgb(95,158,160) rgb(95,158,160) 1
Chr02 48577505 12 1 1 0.5 rgb(210,105,30) rgb(210,105,30) rgb(210,105,30) Chr02 51554906 12 1 1 0.5 rgb(95,158,160) rgb(95,158,160) rgb(95,158,160) 2
Chr03 45779781 12 1 1 0.5 rgb(210,105,30) rgb(210,105,30) rgb(210,105,30) Chr03 47131600 12 1 1 0.5 rgb(95,158,160) rgb(95,158,160) rgb(95,158,160) 3
其中需要注意的是标签[chromosome]下面的chroms参数,它用来设置每一个共线性对在图中的前后顺序,后面跟着共线性对的ID列表,使用逗号分隔,不能有空白符,这里的ID与chromosome_list指定文件中的最后一列对应。chromosome_list文件中每一列的含义:
列号 | 含义 | 是否必选 | 示例 |
---|---|---|---|
1 | 参考基因组中的染色体名称 | 是 | Chr01 |
2 | 参考基因组中的该染色体的长度 | 是 | 56831624 |
3 | 参考染色体名称在图中的大小,字号 | 是 | 12 |
4 | 设置参考染色体条带外围线条的宽度 | 是 | 1 |
5 | 设置参考染色体条带外围线条的透明度,0-1的小数,0:透明;1:不透明 | 是 | 1 |
6 | 设置参考染色体条带内部填充颜色的透明度,0-1的小数,0:透明;1:不透明 | 是 | 1 |
7 | 设置图中染色体名称的颜色,可以是RGB颜色/16进制颜色代码 | 是 | rgb(255,255,255) |
8 | 设置图中染色体条带外围线条的颜色,可以是RGB颜色/16进制颜色代码 | 是 | rgb(255,48,48) |
9 | 设置图中染色体条带内部填充色,可以是RGB颜色/16进制颜色代码 | 是 | rgb(0,0,0) |
10 | 查询基因组中的染色体名称 | 否 | Chr01 |
11 | 查询基因组中的该染色体的长度 | 是 | 56831624 |
12 | 查询染色体名称在图中的大小,字号 | 是 | 12 |
13 | 设置查询染色体条带外围线条的宽度 | 是 | 1 |
14 | 设置查询染色体条带外围线条的透明度,0-1的小数,0:透明;1:不透明 | 是 | 1 |
15 | 设置查询染色体条带内部填充颜色的透明度,0-1的小数,0:透明;1:不透明 | 是 | 1 |
16 | 设置图中染色体名称的颜色,可以是RGB颜色/16进制颜色代码 | 是 | rgb(255,255,255) |
17 | 设置图中染色体条带外围线条的颜色,可以是RGB颜色/16进制颜色代码 | 是 | rgb(255,48,48) |
18 | 设置图中染色体条带内部填充色,可以是RGB颜色/16进制颜色代码 | 是 | rgb(0,0,0) |
19 | 共线性对的唯一ID,通过设置参数chroms后的ID顺序,修改共线性对在图中的顺序 | 是 | 2,1,3 |
执行example1中的示例,绘制完成后的图形如下:
cd tutorials/example1 && sh run.sh #软件配置完成后,注意修改exe/recos有可执行权限
example2:在实例1的基础上添加了染色体共线性的连接线,这一信息是通过coord参数指定的。如果我们想将染色体间的结构变异(SV)展示出来,我们可以通过修改该文件中每个共线性块的颜色(倒数第二列),或者添加新的[link*]标签并配置包含SV的coord文件,例如这个实例中,是通过修改连接block的颜色将一个“移位”的SV标记为蓝色,一个“反转”的SV标记为红色的;
#查看示例2中包含的文件列表
ls tutorials/example2
coords.txt example.ini ref_query.list run.sh
相比example1中的配置文件,example2中的示例配置文件中多了link*参数,用于指定共线性结果,该文件可以使用MUMmer软件分析得到:
[link1] #该属性可以指定多次,例如[link2]、[link3] . . .[link10]
coord = coords.txt #定义染色体对的共线性关系,文件内部可以设置共线性块的颜色,来区分是否时SV,以及其类型
coords.txt文件格式
Chr01 1 575 Chr01 3457 4053 lightgrey 0.5
Chr01 556 817 Chr01 1732 1993 lightgrey 0.5
Chr01 686 4254 Chr01 6709 10270 lightgrey 0.5
Chr01 4249 5168 Chr01 16920 17838 lightgrey 0.5
Chr01 5168 10587 Chr01 19884 25301 lightgrey 0.5
Chr01 9704 11404 Chr01 25536 27231 lightgrey 0.5
Chr01 10727 13092 Chr01 62428 64764 lightgrey 0.5
Chr01 21959 67560 Chr01 64761 110364 lightgrey 0.5
Chr01 67661 69395 Chr01 110439 112171 lightgrey 0.5
Chr01 69593 71222 Chr01 112369 113982 lightgrey 0.5
通过标签[link*]中的coords参数指定的文件中,每一行表示一个共线性块,而每一列表示块的位置和颜色配置信息,具体如下:
列号 | 含义 | 是否必选 | 示例 |
---|---|---|---|
1 | 参考染色体名称 | 是 | Chr01 |
2 | 共线性块起始位置,数值 | 是 | 1 |
3 | 共线性块终止位置,数值 | 是 | 575 |
4 | 查询染色体名称 | 是 | Chr01 |
5 | 共线性块起始位置,数值 | 是 | 3457 |
6 | 共线性块终止位置,数值 | 是 | 4053 |
7 | 区块连接的颜色,默认为灰色,可以是颜色名、RGB颜色、16进制颜色代码 | 否 | grey |
8 | 区块连接的透明度,填写0-1之间的数,0透明;1不透明 | 否 | 1 |
添加link信息后,执行example2中的示例,绘制完成后的图形如下:
cd tutorials/example2 && sh run.sh #软件现在配置完成后,注意修改exe/recos有可执行权限
example3:该示例与example2相比差异如下:
- 将染色体条带设置为透明,即修改chromosome_list参数文件中的第6、15列设置为0;
- 添加ref_in1参数,将PAV变异用蓝色“tile”添加到染色体条带内部;
- 添加qry_in1参数,将qry每个gap的大小使用红色的“hist”添加到染色体条带内部。
[ref_in1]
file = ref.bed #指定绘制几何图形时的信息文件,四列,第四列为占位符
type = tile #指定几何图形类型为tile(瓦片)
pos0 = 0 #设置该几何图形在参考染色体条带内部的起始位置,为相对位置
pos1 = 1 #设置该几何图形在参考染色体条带内部的终止位置,为相对位置
color = rgb(0, 0, 255) #设置tile的颜色,如果不设置,默认为蓝色
fill_opacity = 1 #设置tile的透明度,默认为1,表示不透明
[qry_in1]
file = query.bed #指定绘制几何图形时的信息文件
type = hist #指定几何图形类型为hist(直方图)
pos0 = 0 #设置该几何图形在查询染色体条带内部的起始位置,为相对位置
pos1 = 1 #设置该几何图形在查询染色体条带内部的终止位置,为相对位置
color = rgb(255, 69, 0) #设置直方图内部的填充色
min = 100 #设置最小值
max = 5000 #设置最大值
当要体现的染色体特性信息较多时,可以添加多个ref_in*和qry_in*标签(其中*表示数字)来绘制多种几何元素,并且数字小的几何图形会先画。当然ref_in*和qry_in*用于指定几何图形在条带内部绘制,如果几何图形在条带外部绘制,需要使用标签ref_out*和qry_out*。这种类型标签通过下划线分隔,末尾跟着数字,分为三部分,每一部分说明如下表:
序号 | 含义 | 可选项 | 示例 |
---|---|---|---|
第一部分 | 指定几何图形在参考,还是查询中绘制 | ref(参考)、qry(查询) | ref_in1、qry_in1 |
第二部分 | 指定在条带内部还是外部。ref的外部指的是条带上方,qry的外部指的是条带下方 | in(条带内部)、out(条带外部) | ref_in1、ref_out1 |
第三部分 | 末尾的数字可以定义几何图形的绘制顺序,并且可以生成唯一标签ID | 整数即可 | ref_in1、ref_in2 |
在ref_in*和qry_in*标签下面,包含两个指定几何图形位置的参数,分布是pos0和pos1,分别制定图形的起始和终止位置。下面将要讲到ref_out*和qry_out*也包含这两个参数,其中in表示条带内部的位置,而out表示条带外部的位置。in的示例如下图:
#查看示例中包含的文件列表
ls tutorials/example3
coords.txt example.ini query.bed ref.bed ref_query.list run.sh
绘制几何图形时,是通过file参数将数值信息告诉绘图程序,以此决定使用较大或较小的图形、较深或者较浅的颜色绘制图形。file参数后面的文件是一个标准的bed格式文件,包含四列,分别是序列名称、起始位置、终止位置和值的大小,如下示例:
$ head ref.bed
Chr01 144831 145014 184
Chr01 278803 279133 331
Chr01 290429 290552 124
Chr01 352638 352778 141
Chr01 353903 354054 152
Chr01 841416 841594 179
Chr01 846698 846810 113
Chr01 928495 928784 290
Chr01 929042 929482 441
Chr01 933960 934197 238
$ head query.bed
Chr01 396 655 260
Chr01 969 1732 764
Chr01 1993 2342 350
Chr01 2613 2882 270
Chr01 3184 3457 274
Chr01 4053 4822 770
Chr01 5459 5976 518
Chr01 27231 28333 1103
Chr01 28469 29523 1055
Chr01 29634 30538 905
了解相关参数含义和输入文件格式后,执行example3中的示例,得到的图形如下:
cd tutorials/example3 && sh run.sh #软件现在配置完成后,注意修改exe/recos有可执行权限
example4:相比实例3,我们将ref_in1修改为了heatmap类型,并添加了ref_out1将PAV的特性以hist展示在染色体条带外侧。ref_out1和ref_in1类似,可以添加更多的ref_out*(*表示数字),也可以通过pos0和pos1修改几何元素在图形中的位置。
其中ref_in*、ref_out*、qry_in*、qry_out*都可以通过type设置几何体图形的类型,也都可以通过pos0和pos1指定几何图形在图中的位置。当然type指定的几何图形类型不同时,各自支持的参数也有不同,各几何图形和其可以支持的参数见下表:
序号 | 参数名称 | 支持的几何图形及含义 | 说明 |
---|---|---|---|
1 | stroke_color | line(线条颜色)、hist(边框颜色)、 | 默认红色 |
2 | stroke_width | line(线条宽度)、hist(边框宽度) | 默认1像素 |
3 | stroke_opacity | line(线条透明度)、hist(边框透明度) | 0-1内的小数,0:透明,1:不透明(默认) |
4 | low_color | heatmap(热图低位色) | 值较小时,使用的rgb颜色值,如果没有设置color_file,必须设置 |
5 | high_color | heatmap(热图低位色) | 值较小时,使用的rgb颜色值,如果没有设置color_file,必须设置 |
6 | fill_opacity | hist(填充色的透明度) | 0-1内的小数,0:透明,1:不透明(默认) |
7 | pos0 | 所有类型 | 指定几何图形范围,起始位置,必须设置 |
8 | pos1 | 所有类型 | 指定几何图形范围,终止位置,必须设置 |
9 | min | 除tile外的类型 | 图形范围展示的最小值,默认文件第四列最小值 |
10 | max | 除tile外的类型 | 图形范围展示的最大值,默认文件第四列最大值 |
11 | lab | 几何元素的label | 非必要,不要设置 |
12 | lab_size | 几何元素的label的字体大小 | 非必要,不要设置 |
13 | lab_color | 几何元素的label的颜色 | 非必要,不要设置 |
14 | color_file | heatmap(颜色代码的文件) | 文件包含一例,为颜色代码列表,从头到尾生成渐变色列表 |
ls tutorials/example4
coords.txt example.ini query.bed ref.bed ref.gc.bed ref_query.list run.sh
了解不同几何图形支持的参数后,执行example4中的示例,得到的图形如下:
cd tutorials/example4 && sh run.sh #软件现在配置完成后,注意修改exe/recos有可执行权限
example5:基于实例3展示了pos0和pos1的效果,将ref的两个特性都放在了染色体条带内部,分别用ref_in1和ref_in2指定,其中ref_in1表示绘制hist几何图形到染色体条带内的0.1-0.6处,ref_in2表示绘制heatmap几何图形到染色体条带内的0.6-0.9处。如果ref_in1和ref_in2都是pos0=0,pos1=1,那么这两种图形会在相同的位置,当图形元素出现遮挡时,可以调整后面的数字修改绘制顺序。
ls tutorials/example5
coords.txt example.ini query.bed ref.bed ref.gc.bed ref_query.list run.sh
灵活设置pos0、pos1可以绘制出更丰富的形,执行example5中的示例,得到的图形如下:
cd tutorials/example5 && sh run.sh #软件现在配置完成后,注意修改exe/recos有可执行权限
3. 设计思路
软件会根据用户设置的长度和宽度,对应canvas标签中的width、height参数,单位为像素,生成画布。然后根据margin参数设置的大小预留四周的边缘区域,该参数包括四个值分别是上、下、左、右四个方向预留的像素数目,示意图如下:
每一对进行共线性比较的染色体都有一个唯一ID,每个ID对应到图中一个区域,该区域使用inner_ratio参数分为5个部分,这个参数后面是用逗号分隔的5个小数,用于指定这5部分占该区域的比例,如下图示例: