我在SQLite数据库中保存了大量的网络信息。我想以网络图的样式绘制基于此信息的图表。
我希望它是交互式的,从某种意义上说,在最高层次上只能看到网络范围的通信,当你深入到图表中时,你会开始看到各个节点(交换机,路由器,防火墙,主机,服务器)等等都联系在一起。
我希望这个过程尽可能顺畅,让您可以使用图表位置的滚轮进行放大,并在此过程中进行扩展。然后允许您单击并拖动地图。但是我想首先了解基础知识,所以我认为我应该首先在HTML中绘制图表,并为节点提供超链接,允许用户使用浏览器在图表中移动并更深入。
用户能够将他们的视图捕获为静止图像也是至关重要的,我猜这将更容易用HTML完成。
为了达到这个目的,我问我可能会在哪里开始这样做。我已经看过PyQT,Graphviz,输出到HTML等等。我只是想确定要使用什么以及一般如何去做。我对Python相当不错,但我对其他语言的建议持开放态度。
如果你们认为Python可以做到这一点,哪个Python? 2.7还是3?我一直在考虑暂时搬到3,是时候了吗?
提前致谢!
答案 0 :(得分:2)
这里重要的是你想要一些动态的东西,并且可以被用户捕获。
我的回答与此question非常相似。
将图表导出为标准格式,例如GEXF,并使用Javascript图形绘制库使图表具有交互性,例如:SigmaJs或VivaGraphJs。
最大的好处是您可以编写图表脚本以响应用户事件,例如缩放,另存为图片或动态显示有关节点和边缘的信息等。
要恢复:
首先是一个python图形库,例如Networkx,然后将图形的属性导出为JSON或GEXF。
使用示例作为基线,使用javascript图库加载图形。 List of examples using sigma.js,tutorial for VivaGraphJs。
关于python版本,它实际上依赖于您可能使用的其他库。对于科学用途,我不建议切换到Py3k,但除此之外你还有其他任何好处。
答案 1 :(得分: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,收集信息和绘制网络图方面的作用。
希望这有帮助。
干杯,
卢卡斯
答案 2 :(得分:0)
我建议您查看库d3graph
。它不允许您使用滚轮进行缩放,但是具有其他功能,例如折边。
可在此处找到更多信息:Django and interactive graph/network visualization