如何利用Graphviz画有向图/无向图
如何利用Graphviz画有向图/无向图
任务说明
我现在有一张图,这张图的储存方式为:
- 一个列表包含所有节点
- 节点中储存着节点与节点之间的关系
这张图的结构为:
- 节点分为输入节点,中间节点和输出节点
- 我希望输出节点和输入节点能够在一排或一列显示
结果如下:
安装Graphviz
graphviz实际上是一个软件,但是可以用python生成dot脚本,再用graphviz解析得到图片
step1. 下载Graphviz软件
下载路径:
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
安装时需要将bin文件夹的路径加入到环境变量path
注意在安装的时候会有提示是否要把bin加入环境变量,直接勾选即可,省去很多步骤
step2. pip安装graphviz
1 | pip install graphviz |
Graphviz的一些使用方法
1 | import graphviz as gz |
创建图
有向图
1 | graph = gz.Digraph() |
无向图
1 | graph = gz.Graph() |
创建节点
1 | graph.node(name='a') |
name只能为字符串
node属性:
attrs | describe |
---|---|
name | 相当于id |
color | 边框颜色,如果style='filled’为填充颜色可以用关键字,比如black,也可以用16进制 |
style | filled-进行填充 |
label | node在图中显示的内容 |
shape | node的形状,关键词见下图 |
fontname | 更改字体 |
创建关系
1 | graph.edge('a','b') |
画图
1 | graph.view() |
使用子图对输入节点和输出节点的位置进行规定
参考:python中graphviz中的图节点位置(https://www.codenong.com/34747843/)
1 | graph = gz.Digraph() |
如果要输出节点也对其的话只需要再添加一个子图,rank设为max即可。但注意这可能并没有解决所有图的对其问题,如果有更多的行/列需要对齐呢?
附录
graphviz所有的属性 见 (https://www.cnblogs.com/Zzbj/p/11431015.html)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Li Zhenghao🚴!