当前位置:首页>开发>正文

python画饼状图代码 Python的matplotlib怎么在一张画布上,画两个饼状图啊

2023-04-11 01:59:32 互联网 未知 开发

python画饼状图代码 Python的matplotlib怎么在一张画布上,画两个饼状图啊

Python的matplotlib怎么在一张画布上,画两个饼状图啊?

%matplotlib inline
import matplotlib.pyplot as plt

# 121 > 1行2列第1个
fig1 = plt.subplot(121)
plt.pie([1,2,3])
# 122 > 1行2列第2个
fig2 = plt.subplot(122)
plt.pie([10,5,5])

# 亦可以plt.subplot(221) 2行2列第1个

求python代码,可以表示这个图形

import turtle as t
colors = [red, orange, blue, yellow]
radius = list(range(20, 200, 15))
ori = [45, 135, 225, 315]
for i in range(0, 4):
    t.pencolor(colors[i])
    t.setheading(ori[i])
    for j in radius:
        t.circle(j)其他的修改一下参数就好了

如何用Python绘制Circos图

用Python实现Circos图的绘制在线绘制的Circos有一定局限性,如对数据的要求、个性化的局限和处理速度等的问题,但如果你是一个Pythoneer或者喜欢用更加Pythonic的方式来个性化地绘制Circos图,那么今天就跟随我一起用代码实现这一目标吧!
安装Circos包
首先,登录Python的包索引网站Python Package Index(PyPI,正确读音是:Pie Pee Ai),找到Circos包的下载页:
https://pypi.python.org/pypi/Circos/1.3.该包/模块的作者是我的好友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] * 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()
从而得到这张图。

怎么在 python中用matplotlib画韦恩图?求助!求代码!

亲,我好想回答过你的问题,matplotlib本身没有Venn图的函数,需要安装库matplotlib-venn,安装之前需要先确保具有numpy, scipy, matplotlib.这三个库。
安装方法:
easy_install matplotlib-venn代码示例:
set1 = set([A, B, C, D])
set2 = set([B, C, D, E])
set3 = set([C, D, E, F, G])

venn3([set1, set2, set3], (Set1, Set2, Set3))
plt.show()

如何用python绘制各种图形

# 图形1for i in range(7,0,-2): print 7**# 图形2for i in range(1,8,2): print i** (7-i)* # 图形3for i in range(1,8,2): print (7-i)/2* i** (7-i)/2* # 图形4for i in range(7,0,-2): print (7-i)/2* i** (7-i)/2*

最新文章

随便看看