1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > networkx使用Graphviz画图要点

networkx使用Graphviz画图要点

时间:2018-11-07 07:35:55

相关推荐

networkx使用Graphviz画图要点

本文涉及的工具

Graphviz(官网)Pygraphviz(安装Pygraphviz的正确姿势)networkx(pip install networkx)

import networkx as nxG1 = nx.MultiDiGraph()node = ['A', 'B', 'C', 'D', 'E']edge = [('A', 'B'), ('B', 'C'), ('C', 'D'),('C', 'E')]for i in node:G1.add_node(i)for i in edge:G1.add_edge(i[0], i[1])G1.graph['edge'] = {'arrowsize': '0.5'} # 箭头大小G1.graph['node'] = {'shape':'box'} # 节点形状G1.graph['graph'] = {'splines': 'spline', 'rankdir':'LR'} # 线型与布局方向A = to_agraph(G1)A.layout('dot') # 布局方法A.draw('./graph/test2.png')

1.修改节点边框颜色

G.add_node(node, color="red")

2. 修改节点背景颜色

G1.add_node(i, style='filled')G1.graph['node'] = {'shape':'box', 'color':'red'}

3.中文乱码

在上述图中增加一个中文节点,发现中文无法正常显示

解决方法,在节点属性中添加指定中文字体,即可正常显示

G1.graph['node'] = {'shape':'box', 'color':'red', 'fontname':'FangSong'}

4. 其他节点与边属性

节点形状(shape),节点的高度宽度或半径(width,height),边的长度(len),边的线形(spline),箭头大小(arrowsize),箭头方向(dir)等等,每个属性内部的内容详见Graphviz官网

5. 图形布局要点

Graphviz使用自动排版,提供了多种布局引擎,个人比较喜欢dot和neato排版,如果节点较多且节点标签文字比较长的话建议使用dot排版,否则neato排版更紧凑些,如下图所示。

当使用dot排版时,不建议使用curved曲线,因为该线形会穿过节点,影响美观性,建议使用spline样条线以及ortho正交线。下图展示了使用dot排版和curved曲线,可以看到部分曲线穿过了节点(为了隐去部分敏感数据信息,将中文字体使用乱码掩盖)

当画图时发现布局较难看的时候,可以尝试给边添加标签和权重,通过添加标签会对线条布局机制产生一定的影响,而权重则影响边的长度,权重越大的边,越短且越直。下面通过一个案例说明添加标签与权重对布局的影响。

第一幅图为使用dot布局机制和spline样条线,未添加标签和权重时的结果,可以看到左侧存在一条较粗的线对图片的美观程度产生较大影响。

添加标签,可以看到布局发生了调整,第一幅中左侧较粗的线现在调整到了图的中部

添加权重,那根较粗的线变成了垂直的线,图结构更加清晰,布局美观

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
python graphviz画图

python graphviz画图

2020-04-12

graphviz 文本画图工具

graphviz 文本画图工具

2021-01-04

Graphviz 画图教程

Graphviz 画图教程

2024-02-15

用Graphviz来画图 1

用Graphviz来画图 1

2019-01-31