如何用python画条形图-python绘制分形树教程【怎样用python 绘制条形图】

用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=[]

版权声明:本站所有文章皆为原创,欢迎转载或转发,请保留网站地址和作者信息。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值