查看原文
其他

Python图形可视化之graphviz

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:周聪聪

本文编辑:杨慧琳

技术总编:张学人

有问题,不要怕!访问 

http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx(复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难。

在往期推文《代码也疯狂:diagram生成流程图》中我们曾经介绍过如何在Stata里使用dot语句生成流程图。那么今天,我们重点为大家介绍如何在python中绘制流程图:使用graphviz库,编写代码生成dot脚本,即可调用Graphviz软件进行解析,生成相应的图片。

由于graphviz库需要和Graphviz软件一起使用。要成功安装,需经过以下两个步骤:step1,安装Graphviz软件,并配置环境变量;step2,在cmd窗口输入 "pip install graphviz" 安装graphviz库。

首先,我们来了解下Graphviz软件。它可用来绘制有向图,主要侧重于逻辑设计方面:如我们日常所用的思维导图,程序流程图,关系图,机器学习的决策树等。


图一的流程图就是用Graphviz软件画出来的。而在python中,我们可通过graphviz库轻松调用Graphviz,绘制这种流程图。下面我们一起来学习下如何绘制出这种有向图吧!

graphviz库通过使用图(Digraph/graph)、节点(node)和边(edge)等来绘制关系图或流程图,相应地不同结构有着不同属性,使用时可通过添加或删除属性来改变图形显示样式。接下来,我们先通过简单图的绘制来了解不同属性吧~

首先,依旧是导入模块,创建图表实例:

from graphviz import Digraphdot=Digraph(comment='Picture')

然后,添加节点,并设置相应属性。在下面的程序中,我们设置节点A的标签为'Dot A',文本颜色(fontcolor)为蓝色,节点框(color)的颜色为红色;设置节点B的标签为'Dot B',文字大小(fontsize)为16;同理,设置节点C的形状(shape)为菱形:

dot.node('A','Dot A',fontcolor='blue',color='red')dot.node('B','Dot B',fontsize='16')dot.node('C','Dot C',shape='diamond')

最后,设置节点方向及边属性,并查看图形:

dot.edges(['AB','AC'])dot.edge('B','C')dot.view()

如此,一个简单的流程图就绘制成功了。但是这个流程图看着有些乱,不够美观,是否可通过更改不同参数来改变其显示样式呢?这就涉及到边属性了。我们一起通过如下程序进一步了解下:

from graphviz import Digraphdot=Digraph(comment='Picture')dot.node('A','Dot A',fontcolor='blue',color='red')dot.node('B','Dot B',fontsize='16')dot.node('C','Dot C',shape='square') #设置节点C的形状为方形dot.edges(['AB','AC'])dot.edge('B','C',arrowsize='1.5',constraint='false') #设置BC节点之间的有向标的箭头大小为1.5,并添加constraint属性设置是否根据边来影响节点的排序dot.view()

同时,我们还可以输入如下程序查看相应的dot代码,并生成对应的PDF文件:

print(dot.source)dot.render('D:\picture',view=True)

注:我们也可以在Graphviz软件中自行编写上图的dot代码并运行,即可生成对应的流程图。但在Python中通过graphviz库编写代码就能生成流程图,更加简单便捷。

爬虫俱乐部是您身边的科研助手,能够为您在数据处理实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:

https://ke.qq.com/course/286526?tuin=1b60b462,

敬请关注!

通过上述的两段程序,想必大家已经对如何绘制有向图有了初步了解。还记得开篇我们所展示的看似错综复杂的流程图吗?下面,我们来展示下如何用graphviz库绘制出图一吧:

from graphviz import Digraphgrap_g = Digraph("G",format="pdf")sub_g0=Digraph(comment="process1",node_attr={"style":"filled","color":"red"}) #一般可在单个节点处设置其属性,也可在创建图表时通过添加"node_attr"属性来设置节点样式:在这里,设置节点颜色为红色并进行填充sub_g0.node("a0","a0")sub_g0.node("a1","a1")sub_g0.node("a2","a2")sub_g0.edge("a0","a1")sub_g0.edge("a1","a2")sub_g0.edge("a2", "a0")sub_g1=Digraph(comment="process1",graph_attr={"style":'filled'})sub_g1.node("B","b0")sub_g1.node("C","b1")sub_g1.edges(["BC"])grap_g.node("start", label="start",shape="diamond")grap_g.node("end", label="end", shape="diamond")grap_g.subgraph(sub_g0)grap_g.subgraph(sub_g1)grap_g.edge("start","a0")grap_g.edge("start","B")grap_g.edge("a1","B")grap_g.edge("a2","end")grap_g.edge("B","end")grap_g.view()

可以看到,我们先后创建了三个图表:grap_g、sub_g0、sub_g1。首先,对三个图表内的节点,边等分别进行设置;然后,通过"grap_g.subgraph","grap_g.edge"将不同图表中的节点连接起来;最后,查看图表。这样,图一就绘制出来了。

以上就是关于graphviz库的全部介绍了。本文只截取了一部分重要且常用的属性进行了介绍,感兴趣的读者可进一步的了解其他属性并根据绘图需要进行使用。

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存