背景
近日有个需求是想更好地展示网络图及其属性,之前使用的 networkx 库可以处理图数据但画出来的图是静态的且不具备任何交互性,因此想找一个交互性较好的网络图绘制工具。
目前了解的基于 Python 语言绘制动态图的库包括但不局限于以下几种:
Ployly PyEcharts AnyChart PyVis
其它绘图软件 Gephi 和 Pajek 提供非常好的绘图效果但不支持源码操作,本文注重 Python 源码绘图工具。
❝以下仅体验这几种不同工具的绘制效果来进行比较选择,不附加任何源码,如有需要请参考提供的官方链接。
❞
Plotly
著名的 python 交互式图表可视化库,但其绘制 network graph 图局限性较大,以下参考官方教程示例。
https://plotly.com/python/network-graphs/#
简单的图绘制结果如下,节点可以显示「标签」及其「连接度」。
仅可以对整个图使用缩放功能,但是不可将节点拖动。
当然有其它解决方法来绘制节点可拖动的图,结果如下所示
但是其基于 dash 库 pip install dash dash-cytoscape
,感觉稍微有点麻烦而且不提供对 notebook 的支持。
详细参考官方教程:https://plotly.com/python/
PyEcharts
Echarts 是百度开源的图表可视化项目,对 JavaScript 支持效果非常好,同时也提供了 Python 接口 pyecharts。
https://pyecharts.org/#/zh-cn/basic_charts?id=graph%ef%bc%9a%e5%85%b3%e7%b3%bb%e5%9b%be
Pycharts 绘制的关系图如下所示,除了显示节点和边的标签外,可以高亮当前选中的节点和边,但其基于图布局不可以随意拖动节点。
当然也可以达到其它更加绚丽的效果,📢 图可以根据布局进行动态展示的,看起来更加炫!
参考:https://gallery.pyecharts.org/#/Graph/README
AnyChart
AnyChart 这个项目的图展示效果非常符合我对图的需求,节点和边的形状、标签信息可以高度定制化,而且节点可以任意拖动,可以基于 Java、Scala、JavaScript、Python等语言使用。
https://docs.anychart.com/Basic_Charts/Network_Graph
以下列举几个官方给的示例,
虽然 AnyChart 支持 Python,但是需要配合 Django、MySQL 一起使用就有点复杂,这个库比较适合中大型项目的图展示。对于日常图效果展示有点杀鸡用牛刀了!
PyVis
PyVis 是一个可交互的图可视化库,可以以 networkx 格式的图作为输入进行展示。
https://pyvis.readthedocs.io/en/latest/
提供了基本的节点显示和操作,可以有不同的布局,展示结果如下所示
个人感觉图展示美化效果稍微 low 一点但基本符合需求,因此目前先采用这个库来做可视化,后续在使用过程中再进行更新其缺点。
dreamhomes
博客:dreamhomes.top
隐形字
公众号:DreamHub
长按识别二维码关注
👇🏻 左下角点击 「阅读原文」 排版效果更好哦!