相关文章:
在使用circos online(http://mkweb.bcgsc.ca/tableviewer/)绘制circos图时,由于我们的输入的行或者列超过100行时,系统会自动对数据进行截断,只取前100行100列,导致绘制的circos图像缺失了后边我们的数据,如何能绘制完整的图像呢?通过多次测试,我在这通过数据拼接的形式实现,先贴上官网的结果图以及数据拼接后的结果图:
先说一下输入文件:共142列11行(包括header),列名以XY开头,共141项,行名以OTU开头,共10项。(为了方便区分行名和列名,在这要求行名和列名有一定的可区分度,例如以某个字符串开头为行名,否则为列名等等)
官网结果图:
只有95个XY:(前100个XY,并且其中5个列为0,不显示)
(使用浏览器的查询功能)
拼接后的结果图:
共134个(有七个XY的列全为0,所以不显示)
说一下前序准备:
1.将原始数据分为两个txt(列和行header都保留),比如我将前71列的数据放在第一个表内,72-141列的放在第二个表内。(以两个文件为例,如果上百则需要分为多个,每个列或行数最大为100,代码不动的话每次操作两个,依次合并)
2.每个表分别上传到http://mkweb.bcgsc.ca/tableviewer/,点击Visualize Table,获取结果。
3.分别下载数据。
4.分别解压后,找到data文件夹,重命名为data1或data2后,移动到同一个目录内。
之后,我们分别读取data1和data2文件夹下地同名文件,按照某种规则将他们的信息拼在一起后,得到合并后的数据。
为了准确地拼接每个数据,首先要对每个数据的含义进行分析。
data文件夹下的数据如下:
倒着看,1.stderr.txt 这是个空的,不管了
2.segmentlabel.txt:
定义了每个label(txt在第一列,对应输入表格的行名和列名)对应的segment的长度信息(第三列),第二列为全0.第四列与第一列相同。
对应图中的如下信息(红框框出),注意,segment不包括底部的小方块(右侧的红框拦截的部分)
3.scaling.conf
定义每个label(OTU和XY)的缩放,默认为1
4.row.txt
定义了每个OTU(行名)的row的贡献圈(三层贡献圈的最内侧)的每个段使用的颜色变量名,颜色是连接的XY(列名)的设置好的颜色,见colors.conj。
三层贡献圈:
1表示all(每个label的all为其col和row的拼接),2表示col,3表示row。
所以,row.txt对应图中的如下信息:
例如某行中出现 OTU_8 25411 35891 fill_color=colorxy1831
意思为OTU8的row贡献圈的下标25411到25891(上图红框内的某个颜色格)颜色为XY1831的颜色。
5.parsed.txt 看起来挺乱的,但是绘制图像时没有用到这个文件,掠过
6.karyotype.txt
定义了label的segment宽度和使用的颜色变量名。(和segmentlabel相似,宽度是一致的但是多了颜色信息)
7.color_percentile.conf
ribbon的颜色信息,这个是默认的,即两个数据的这个文件是完全一致的,不用拼接。
8.colors.conj
定义了每个颜色变量名称对应的RGB颜色值(karyotype.txt使用的是颜色变量名)
9.col.txt
与row.txt 定义了col贡献圈的分段颜色信息。
10.cells.txt
每两行表示每个ribbon连接的OTU和XY的段,使用color_percentile.conj定义的颜色变量对每个ribbon填色(_a1可以忽略),z表示颜色深度。(下图黑色曲线圈出的紫色内容为一个ribbon,不包括两端的红色和绿色块)
11.cap.row.txt与cap.col.txt
ribbon所连接的两端的cap的段颜色。(下图黑框)
12.all.txt
贡献圈的段颜色。