HiC | contacts vs distance

日常瞎掰

  在HiC的交互矩阵里,随着基因组距离的增加,染色体片段之间的交互频率降低。通过染色体距离与交互频率间的这样关系,我们可以获知全基因组范围内的pattern。并且,已知在细胞周期、细胞类型等不同情况下会呈现出不同的pattern。因此,通过绘制contacts vs distance的曲线图,我们可以观察不同样本间这种pattern是否有变化。

准备数据

  cooltools结合cooler可以用来快速获取绘图的数据。下面使用软件自带的数据进行演示:

import cooler
import cooltools as ct

cool_file = cooltools.download_data("HFF_MicroC", cache=True, data_dir='./data/')
clr = cooler.Cooler('./test.mcool::/resolutions/100000')
cvd = cooltools.expected_cis(clr=clr, nproc=4)
cvd
     region1 region2  dist  n_valid  count.sum  balanced.sum    count.avg  balanced.avg  balanced.avg.smoothed  balanced.avg.smoothed.agg
0       chr2    chr2     0     2309        NaN           NaN          NaN           NaN                    NaN                        NaN
1       chr2    chr2     1     2290        NaN           NaN          NaN           NaN               0.000773                   0.000837
2       chr2    chr2     2     2280  6796628.0    165.955165  2980.977193      0.072787               0.067210                   0.072680
3       chr2    chr2     3     2271  4343042.0    104.663306  1912.391898      0.046087               0.044613                   0.047050
4       chr2    chr2     4     2269  3035631.0     74.149739  1337.871750      0.032679               0.031651                   0.032792
...      ...     ...   ...      ...        ...           ...          ...           ...                    ...                        ...
3250   chr17   chr17   828        3      146.0      0.006447    48.666667      0.002149               0.000121                   0.000050
3251   chr17   chr17   829        2      133.0      0.006013    66.500000      0.003007               0.000121                   0.000050
3252   chr17   chr17   830        1       55.0      0.002013    55.000000      0.002013               0.000121                   0.000049
3253   chr17   chr17   831        0        0.0      0.000000          NaN           NaN               0.000121                   0.000049
3254   chr17   chr17   832        0        0.0      0.000000          NaN           NaN               0.000122                   0.000049

[3255 rows x 10 columns]

   balanced.avg.smoothed 是用于绘图的数据,该数据是区分不同染色体的,而balanced.avg.smoothed.agg不区分染色体。这两列数据都经过smooth处理,可以绘出平滑的曲线。
  值得注意的是,软件推荐的做法是先去除着丝粒区域,因为该区域pattern与基因组其他区域不同。如果采用此方式需要准备染色体长短臂的位置信息数据框。如果物种是人的话,可以直接用代码获取,其他物种就要自己构建了。

import bioframe
import pandas as pd

hg38_chromsizes = bioframe.fetch_chromsizes('hg38')
hg38_cens = bioframe.fetch_centromeres('hg38')
hg38_arms = bioframe.make_chromarms(hg38_chromsizes,  hg38_cens)
hg38_arms = hg38_arms[hg38_arms.chrom.isin(clr.chromnames)].reset_index(drop=True)
hg38_arms
   chrom     start        end     name
0   chr2         0   93139351   chr2_p
1   chr2  93139351  242193529   chr2_q
2  chr17         0   24714921  chr17_p
3  chr17  24714921   83257441  chr17_q

cvd = ct.expected_cis(clr=clr,view_df=hg38_arms,nproc=4)

绘图

  数据已经拿到,下面就可以绘图了。由于数据跨度范围比较大,绘图的时候一般都是分别对X、Y数据做对数处理。

import numpy as np
import matplotlib.pyplot as plt

cvd['genomic_dist'] = cvd['dist'] * 100000
cvd['balanced.avg.smoothed.agg'].loc[cvd['dist'] < 2] = np.nan

plt.loglog(cvd['genomic_dist'], cvd['balanced.avg.smoothed.agg'])
plt.xlabel('genomic distance')
plt.ylabel('contact frequency')
plt.legend()
plt.show()

结果如下:

  注意,绘图之前还是需要将间隔的bin个数转化为实际的染色体线性距离,如这里用的矩阵分辨率为100kb,所以数据中dist列乘以分辨率得到实际具体。同时,还需要过滤一下数据去除低质量的值。

结束语

  由于交互频率与基因组的线性距有这样的pattern,所以绘制contacts vs distance曲线图用的数据来自于染色体内的交互。cooltoolsHiC数据可视化方面功能还是挺多的,而且使用起来也挺方便,不管是命令行还是模块导入,值得推荐。


往期回顾

bed基因注释
scanpy踩坑实录
差异基因密度分布
R绘图配色总结
saddleplot | A/B compartments

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  •   最近做了一个似乎有些无聊的事情,就是分析RNA-seq的差异基因在染色体上的密度分布。为什么说无聊呢?因为不知...
    生信云笔记阅读 680评论 0 10
  •   今天继续分享生信分析中常见的图形 -- Network。网络图可以直观地展示复杂系统中各元素之间的联系,从而有...
    生信云笔记阅读 841评论 3 5
  •   和弦图(chord Diagram),是一种显示数据间相互关系的可视化方法,节点数据沿圆周径向排列 (节点的权...
    生信云笔记阅读 1,584评论 0 13
  • 日常瞎掰   ChIP-seq可以用来研究某种转录因子或者组蛋白(后面统称为蛋白因子吧)在基因组上的结合位置,从而...
    生信云笔记阅读 1,053评论 1 10
  •   今天我们来分享一种生信分析中不那么常见的图 -- 泡泡图。该图展示的内容类似barplot,只不过用圆圈的大小...
    生信云笔记阅读 1,950评论 2 7