使用Python或其他工具制作交互式网络拓扑图?

5
我在SQLite数据库中有大量的网络信息。我想基于这些信息绘制一张网络图表,使其以网络图表的方式呈现。
我希望这个过程是互动的,在最高级别上只能看到网络范围通信,在深入到图表时,您会开始看到连接在一起的各个节点(交换机、路由器、防火墙、主机、服务器等)。
我希望这个过程尽可能顺畅,允许您使用滚轮在图表位置缩放并随着您的操作而展开。允许您点击和拖动地图。然而,我希望首先掌握基础知识,因此我考虑首先在HTML中绘制图表,并为节点添加超链接,以便用户可以使用浏览器在图表中进行移动和深入了解。
还特别重要的是,用户应该能够捕捉他们的视图作为静态图像,我猜这在HTML中更容易实现。
直奔主题,我正在询问如何开始做到这一点。我已经看过PyQT,Graphviz,输出到HTML等。我只是试图决定使用什么,以及如何开始这样做。我对Python相当熟悉,但是我也可以考虑其他语言的建议。
如果您认为Python可以做到这一点,那么应该选择哪个版本的Python? 2.7还是3?我考虑已经很久了,是时候转向3吗?
提前感谢您的帮助!
3个回答

2
这里重要的是你想要一些动态的东西,可以被用户捕捉到。
我的答案与这个问题很相似question
将你的图表导出为标准格式,如GEXF,并使用Javascript图形绘制库使你的图表具有交互性,例如:SigmaJsVivaGraphJs
最大的优势是你可以编写脚本来响应用户事件,如缩放、保存为图片或动态显示节点和边的信息等。
总之:
首先,您需要使用Python图形库,例如Networkx,然后将其属性作为JSON或GEXF导出。然后,使用JavaScript图形库加载图形,并使用示例作为基准。sigma.js的示例列表VivaGraphJs教程。关于Python版本,它实际上取决于您可能使用的其他库。对于科学用途,我不建议切换到Py3k,但对于其他任何内容,您都可以开始了。

我最终选择了d3.js,并使用Python创建所需的JSON文件。 - user3078629

2
我曾经遇到过类似于你的问题。我们有一个MySQL数据库中记录了大量路由器的信息。实际上,我们使用Racktables这个工具,它以这种方式存储所有信息。
有一段时间,我们需要绘制网络拓扑图。如果你想的话,请看一下这个:

https://notedisabbia.wordpress.com/2016/06/17/first-blog-post/

https://github.com/RackTables/racktables-contribs/tree/master/python-graph-topology

第一个链接是我写的博客,旨在解释我的Python程序(第二个链接)如何连接到Racktables、收集信息并绘制网络图表。
希望这有所帮助。
祝好,
卢卡斯

0
我建议看一下 d3graph 库。它不允许使用滚轮缩放,但有其他功能,如断开边缘。 更多信息可以在这个 博客 中找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接