首页

文章

如何用Python绘制Circos图

发布网友 发布时间:2022-04-19 10:04

我来回答

1个回答

热心网友 时间:2022-04-18 04:18

用Python实现Circos图的绘制在线绘制的Circos有一定局限性,如对数据的要求、个性化的局限和处理速度等的问题,但如果你是一个Pythoneer或者喜欢用更加Pythonic的方式来个性化地绘制Circos图,那么今天就跟随我一起用代码实现这一目标吧!

安装Circos包

首先,登录Python的包索引网站Python Package Index(PyPI,正确读音是:Pie Pee Ai),找到Circos包的下载页:

https://pypi.python.org/pypi/Circos/1.3.5

该包/模块的作者是我的好友Eric Ma。你可以选择下载wheeler文件,然后本地安装。也可以在shell下直接通过pip进行安装:

pipinstallcircos

注意,所支持的Python版本必须是3.x,对2不支持。

选择数据

当安装了circos包后,我们就可以直接应用这个包来写代码了。为了演示方便,我需要应用一些数据。作为内科医师,就让我来展示一下老本行:处理药物与肝酶细胞色素P450的相互关系的可视化。由于是为了抛砖引玉,所以绘制出的Circos图相对简单。

我们先从美国FDA官网下载不同细胞色素相关的各种口服药物表。共202种常用的口服药物,涵盖内科学、肿瘤学、神经科和心理学等学科。数据文件如下:

可以看到这个数据的结构:是按肝细胞色素酶进行分类,共分8个列。这8个细胞色素酶分别是:CYP1A2,CYP2B6, CYP2C8, CYP2C9, CYP2C19, CYP2D6, CYP2E1和CYP3A4。我们将要建立各个口服药与这些肝酶之间关系的Circos图,从而了解通过相同肝酶代谢或转化的药物之间是否存在相互作用。

导入各个模块和读入数据

导入各个模块:

fromcircosimportCircosPlot

importxlrd

importpandasaspd

importnumpyasnp

读入文件:

filename='.\\MedicationInteraction.xlsx'

book=xlrd.open_workbook(filename)

print('File loaded!')

提取数据:

nrows=book.sheet_by_name('Sheet1').nrows

header=book.sheet_by_name('Sheet1').row_values(0)

data=[book.sheet_by_name('Sheet1').row_values(i) fori inrange(1, nrows)]

df=pd.DataFrame(data, columns =header)

df[df==''] = np.nan

读取后,药物和酶的数据为pandas的DataFrame数据结构,细胞色素P450酶的名字为columns的名字。我们可以检查一下数据:

修数据,尤其是处理NA数据

df_dict={}

foriinrange(len(df.columns)):

df_dict[df.icol(i).name] =list(df.icol(i).dropna())

节点和连线

创建节点(nodes)数据,在我这个例子里就是各个药物和肝酶:

nodes=[]

forkeyindf_dict.keys():

nodes.extend(df_dict[key])

nodes=list(nodes)

headers=list(df.columns)

enzymes=['0'] * 5

forheaderinheaders:

enzymes.append(header)

enzymes.extend(['0']*5)

nodes.extend(enzymes)

创建连线(edges)数据,我们应用tuple(元组)这个数据结构来表示药物与特定肝酶之间的关系:

edges_origin=[]

forkeyindf_dict.keys():

forvalue indf_dict[key]:

edges_origin.append((key, value))

绘图

绘制Circos图:

c=CircosPlot(nodes, edges_origin, radius =10,

nodecolor="blue",

edgecolor="red",

)

c.draw()

得到了下面这张所有药物与肝酶之间的图:

左上方是8个肝脏细胞色素P450酶(CYP1A2、CYP2B6、CYP2C8、CYP2C9、CYP2C19、CYP2D6、CYP2E1和CYP3A4)。其它点即为202种口服药物。每种药物都与参与代谢和转化它的P450酶相连。与相同酶连接的不同药物,理论上应该都存在相互作用,但具体如何还要看与酶的作用机理。

个性化绘图

如果我们打算分别可视化出不同肝酶的关系图形,我们只需改变连线信息,即edges信息:

edges=[]

‍forvalueindf_dict['CYP2B6']:

edges.append(('CYP2B6', value))

c=CircosPlot(nodes, edges, radius =10,

nodecolor="orange",

edgecolor="orange",

)

c.draw()

从而我们得到了各种肝酶所代谢和转化药物的图形

用PS将它们合并:

相同肝酶所代谢和转化的药物用相同颜色的edges表示。

显示特定药物

最后,我们可以挑选其中一些感兴趣的药物来进行观察,例如,我从这202个药物中指定几个我感兴趣的药物:

propafenone(心律平), acetaminophen(对乙酰氨基酚), paclitaxel(紫杉醇), ibuprofen(布洛芬), losartan(洛沙坦), omeprazole(奥美拉唑), carvediolo(卡维地洛), codeine(可待因), theophylline(茶碱), quinidine(奎尼丁), verapamil(异搏定), lovastatin(洛伐他汀), nitrendipine(尼群地平)

然后重新建立edges:

medications=['propafenone', 'acetaminophen', 'paclitaxel', 'ibuprofen', 'losartan', 'omeprazole', 'carvedilol', 'codeine', 'theophylline', 'quinidine', 'verapamil', 'lovastatin', 'nitrendipine']

edges_candidate=set()

formedicationinmedications:

foredge inedges_origin:

if medication==edge[1]:

edges_candidate.add(edge)

edges_candidate=list(edges_candidate)

然后再绘图:

c=CircosPlot(nodes, edges_candidate, radius =10,

nodecolor="black",

edgecolor="black",

)

c.draw()

从而得到这张图。

ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 看过莫文蔚的腿杨丽萍的背许晴的腰,你能明白自律的人生有多可怕吗? 电信座机彩铃设置广告词 怎么将广告录音设置为电话来电彩铃 如何制作彩铃广告语 如何给电话设置彩铃 彩铃广告语 彩铃广告词 火锅店用的彩铃 求一个手机业务彩铃广告词,大家看看要得不? 彩铃制作广告词 电话彩铃广告词 怎么关闭广告彩铃??? 给我一点字谜,谐音歇后语,笑话 酒店广告语 广告彩铃怎么设置 设计饭店来电彩铃,高手帮帮忙 饭店彩铃内容 饭店彩铃广告词? 饭店彩铃广告词 苹果6s手机充完满电了 再多充一个小时 对电池有伤害吗? 如图是人体消化系统部分器官模式图,请据图回答下列问题:(1)有些药物经常被封装在淀粉制成的胶囊b服用 用一堆小木棒摆一个正方形,如果有剩余,可能还会剩几根? 皇帝的新装续写 如图是人体消化系统的结构模式图,请据图回答:(1)消化系统包括______和______两部分.(2)消化食物和 抖音福袋在哪里找到? 一个手机抖音商城频繁更改收货地址可以吗 抖音已经修改好的收货地址怎么没更新 为什么抖音收货地址确认不了 我的iphone x 配什么牌子的蓝牙耳机好用呢,一定要配airpods吗? 购买apple iPhone X手机官配的耳机是蓝牙耳机吗? 电源插座怎么画qq红包 qq红包电源插座怎么画出来 佛山照明开关红包怎么领取 三孔插座怎么接线方法 QQ里边每天都发红包的群 在淘宝上买的东西已经付款了,可是显示的是没有付款,怎么回事啊 qq插座气泡特效怎么触发 罗格朗开关插座质量怎么样 我想在连接电灯开关的火线和零线 引出一个插座,行不行???大哥帮忙啊 插座线路正确,但插座不通电,为什么??? 急救
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com