python关联图谱2 之 graphviz官网学习笔记+实例附代码

目录

前言

一、只用其自有的dot脚本语言

二、以python语言中结合dot脚本语言

三、只用python语言,调用graphviz包


前言

要做关联图,graphviz也是利器之一。graphviz的安装方法已在前一篇文章

 python关联图谱1 之 networkx官网学习笔记+实例附代码

(链接:https://blog.csdn.net/weixin_42575233/article/details/118785528

有详细介绍过,在此不再赘述。

如果论展示效果,graphviz的效果更炫,可以算是networkx的升级,而neo4j是我目前认知范围内效果最好的工具,这将在此系列的第三篇进行介绍。但最终哪个最好,还是看个人喜好了。

graphviz的使用方式挺多,我见识到了三种:1、只用其自有的dot脚本语言;2、以python语言中结合dot脚本语言;3、只用python语言,调用graphviz包。后面两个各自都有官网的案例提供。


一、只用其自有的dot脚本语言

1、先到 https://graphviz.org/download/ 下载windows版本的安装包,我下载的是 “2.48.0 EXE installer for Windows 10 (64-bit)”,双击下载后的exe文件逐步安装即可。

2、配置环境变量:将安装的bin路径(我的是 D:\Program Files\Graphviz\bin)“新建”到“系统变量”Path,单击“确定”。

3、打开windows的“命令提示符”,输入: dot -version,如果显示相关信息,则安装成功。

4、新建txt文件,命名为“a.txt”,将以下样例代码黏贴到txt中:

 digraph mygraph {
  node [shape=box];
  "//absl/random:random"
  "//absl/random:random" -> "//absl/random:distributions"
  "//absl/random:random" -> "//absl/random:seed_sequences"
  "//absl/random:random" -> "//absl/random/internal:pool_urbg"
  "//absl/random:random" -> "//absl/random/internal:nonsecure_base"
  "//absl/random:distributions"
  "//absl/random:distributions" -> "//absl/strings:strings"
  "//absl/random:seed_sequences"
  "//absl/random:seed_sequences" -> "//absl/random/internal:seed_material"
  "//absl/random:seed_sequences" -> "//absl/random/internal:salted_seed_seq"
  "//absl/random:seed_sequences" -> "//absl/random/internal:pool_urbg"
  "//absl/random:seed_sequences" -> "//absl/random/internal:nonsecure_base"
  "//absl/random/internal:nonsecure_base"
  "//absl/random/internal:nonsecure_base" -> "//absl/random/internal:pool_urbg"
  "//absl/random/internal:nonsecure_base" -> "//absl/random/internal:salted_seed_seq"
  "//absl/random/internal:nonsecure_base" -> "//absl/random/internal:seed_material"
  "//absl/random/internal:pool_urbg"
  "//absl/random/internal:pool_urbg" -> "//absl/random/internal:seed_material"
  "//absl/random/internal:salted_seed_seq"
  "//absl/random/internal:salted_seed_seq" -> "//absl/random/internal:seed_material"
  "//absl/random/internal:seed_material"
  "//absl/random/internal:seed_material" -> "//absl/strings:strings"
  "//absl/strings:strings"
}

5、将文本文件的格式.txt改成.dot,即将 a.txt 改成 a.dot

6、在windows的“命令提示符”中定位到a.dot所在的路径,输入:dot -Tpng a.dot -o a.png,按回车

7、在a.dot所在的路径下,会新生成a.png,即将以上样例代码变为图片了

二、以python语言中结合dot脚本语言

官网链接为 http://www.graphviz.org/gallery/ ,有渐变色的效果。 

 案例又是几十个,代码多、图片大,所以我把代码包拆成2个ipynb文件,请下载:

1、graphviz:graphviz的dot脚本语言+python的官网案例1.ipynb

https://download.csdn.net/download/weixin_42575233/20380051

2、graphviz:graphviz的dot脚本语言+python的官网案例2.ipynb

https://download.csdn.net/download/weixin_42575233/20380159

展示几个经典案例

# Hello World
import graphviz
script = r'''
digraph G {Hello->World}
'''
src = graphviz.Source(script)
src

节点的形状和填充色也很丰富

# Entity-Relation Data Model
import graphviz
script = r'''
graph ER {
	layout=neato
	node [shape=box]; course; institute; student;
	node [shape=ellipse]; {node [label="name"] name0; name1; name2;}
		code; grade; number;
	node [shape=diamond,style=filled,color=lightgrey]; "C-I"; "S-C"; "S-I";

	name0 -- course;
	code -- course;
	course -- "C-I" [label="n",len=1.00];
	"C-I" -- institute [label="1",len=1.00];
	institute -- name1;
	institute -- "S-I" [label="1",len=1.00];
	"S-I" -- student [label="n",len=1.00];
	student -- grade;
	student -- name2;
	student -- number;
	student -- "S-C" [label="m",len=1.00];
	"S-C" -- course [label="n",len=1.00];

	label = "\n\nEntity Relation Diagram\ndrawn by NEATO";
	fontsize=20;
}
'''
src = graphviz.Source(script)
src

也可以做思维导图,虽然写代码比较麻烦。

渐变色的效果,有点绚丽。这边就不附带代码了,可以在ipynb文件中找到。

 

 总之,画图能力,确实挺强。

三、只用python语言,调用graphviz包

它也有自己的官网:https://graphviz.readthedocs.io/en/stable/examples.html

这个方式的效果,没有第二种方法的颜色绚丽,花样也没有那么多,但也挺好用的。

代码graphviz:python的graphviz包下的官网案例.ipynb的下载链接:

https://download.csdn.net/download/weixin_42575233/20380310

同样的hello world,可以和前面比较一下代码的写法区别。

import graphviz

g = graphviz.Digraph('G', filename='hello.gv')

g.edge('Hello', 'World')

g.view()# 导出pdf
g# 直接展示

 

再来一个可以和前面方法比较的例子

import graphviz

e = graphviz.Graph('ER', filename='er.gv', engine='neato')

e.attr('node', shape='box')
e.node('course')
e.node('institute')
e.node('student')

e.attr('node', shape='ellipse')
e.node('name0', label='name')
e.node('name1', label='name')
e.node('name2', label='name')
e.node('code')
e.node('grade')
e.node('number')

e.attr('node', shape='diamond', style='filled', color='lightgrey')
e.node('C-I')
e.node('S-C')
e.node('S-I')

e.edge('name0', 'course')
e.edge('code', 'course')
e.edge('course', 'C-I', label='n', len='1.00')
e.edge('C-I', 'institute', label='1', len='1.00')
e.edge('institute', 'name1')
e.edge('institute', 'S-I', label='1', len='1.00')
e.edge('S-I', 'student', label='n', len='1.00')
e.edge('student', 'grade')
e.edge('student', 'name2')
e.edge('student', 'number')
e.edge('student', 'S-C', label='m', len='1.00')
e.edge('S-C', 'course', label='n', len='1.00')

e.attr(label=r'\n\nEntity Relation Diagram\ndrawn by NEATO')
e.attr(fontsize='20')
e

也能实现渐变色。

import graphviz

g = graphviz.Graph('G', filename='g_c_n.gv')
g.attr(bgcolor='purple:pink', label='agraph', fontcolor='white')

with g.subgraph(name='cluster1') as c:
    c.attr(fillcolor='blue:cyan', label='acluster', fontcolor='white',
           style='filled', gradientangle='270')
    c.attr('node', shape='box', fillcolor='red:yellow',
           style='filled', gradientangle='90')
    c.node('anode')
g

其他案例也有不少,在此也只放几个经典的,还是请大家下载ipynb文件后,自己运行试试,如果能找到自己想要用到的案例,那就更好了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jcodes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值