借助工具绘制完整circos图(二)数据拼接

相关文章:

(一)数据准备与数据理解

(二)数据拼接

(三)生成图像与显示不全等问题

(四)颜色更改

(五)重排序

在(一)中,对每个数据(文件)的含义明确后,之后就是对每个文件的内容进行拼接。(本代码以label名的前缀为区分,要求列名开始为XY,行名可任意,只要开始不为XY即可。可根据需要自行修改,在这里为了统一描述,行名用OTU表示,但是实际并未匹配)

(下文的“写入”和“放入”一般指的是list.append()  )

定义读取文件函数和保存文件函数:

def readfile(filepath):
    with open(filepath, "r") as f:
        data = f.readlines()
    return data
def savefile(filename,data):
    file = open(filename, 'w')
    file.writelines(data)
    file.close()

readfile读取返回一个列表,列表每个元素表示文件的一行(包括换行符)。

savefile将data列表(同上)写入filename中。

首先跳转工作目录后,设置data1的路径和data2的路径,以及输出文件夹的路径。

os.chdir('E:/circos-0.69-9/test')
data1='data1/'
data2='data2/'
outdata='out/'

1.sementlabel.txt拼接

sementlabel.txt包括两部分:XY和OTU。

因为咱们之前把XY分成两部分,这两部分的XY是不同的,但是行名(OTU)是相同的,所以XY的直接放入,而OTU则需要分别统计data1和data2中的段长,相加后,按照原先格式写入。

例如data1有以下数据:

OTU_1 0 1000 OTU_1

data2相应为:

OTU_1  0 2200 OTU_1

则我们将

OTU_1  0 3200 OTU_1

写入。

在这里为了后边的需要,统计了data1中的每个OTU的段长度,存在字典offset。同时统计data1和data2的OTU的段的长度之和,存放在字典OTU。

OTUline和XYline分别储存以OTU开头的行的修改的结果(如上边所说)和XY的结果。(因为怕拼接后OTU的顺序在XY的后方,导致图像中的label顺序错误,所以对他们单独区别开后,在拼接)

sl1=readfile(data1+'segmentlabel.txt')
sl2=readfile(data2+'segmentlabel.txt')
OTUline=list()
XYline=list()
OTU=d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值