Python 可交互的网络图可视化工具
背景
近日有个需求是向用户更好地展示网络图及其属性,之前使用的 networkx 库可以处理图数据但画出来的图是静态的且不具备良好的交互性,因此想找一个交互性好的网络图绘制工具。
目前了解的基于 Python 语言绘制动态图的库包括但不局限于以下几种:
- Ployly
- PyEcharts
- AnyChart
- PyVis
其它绘图软件 Gephi 和 Pajek 提供非常好的绘图效果但不支持源码操作,本文注重 Python 源码绘图工具。
以下仅体验这几种不同工具的绘制效果来进行比较选择,因此不附加任何源码,如需请参考提供的官方链接。
更新线:
bqplot
参考另一篇博客:Python 完美交互的网络图可视化工具库
Jaal
前端提供一些图属性操作,参考源码:https://github.com/imohitmayank/jaal
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 一点但基本符合需求,因此目前先采用这个库来做可视化,后续在使用过程中再进行更新其缺点。