我正在尝试画出运行我的脚本的任何网络的图表。我使用scapy收集数据包,并希望每台计算机通信都有一个节点,每个连接都有一条边。
问题是我找不到一种足够好地在屏幕上可视化图形的方法。到目前为止,将networkx与matlib.pyplot相结合能够带来最佳结果,但仍然看起来相当随机和混乱,标签很难阅读,节点重叠在一起等等。还最好能够与图形交互 - 移动节点,悬停在节点/边缘上以获取额外信息,甚至可以缩放或者聚集节点,以便单击群集时可以看到哪些节点组成了该群集。
由于分析网络数据并将节点和边添加到图形中将很烦琐,因此我在此只添加了相关部分(实际显示我构建的图形的部分):
pos = nx.spring_layout(Graph, scale=2)
edge_labels = nx.get_edge_attributes(Graph, "Protocol")
nx.draw(Graph,pos, with_labels=True, node_size=600, font_size=8, font_weight='bold')
nx.draw_networkx_edge_labels(Graph, pos, edge_labels=edge_labels, font_size=8)
plt.show()
(我将networks导入为nx,matplotlib.pyplot导入为plt)
我还尝试了graphviz、ploty和bokeh,但无法使它们正常工作。在Google上进行故障排除后,我得出的结论是它们不会修复我的问题。我还尝试了adjustText,但无论如何都无法将其适合到我的代码中(找不到如何获取图形的文本属性),以及Holoviews - 但无论我尝试什么方法,它都拒绝显示图像(即使我复制并粘贴他们网站上的示例 - 要么Python说“%opts...”是无效语法,要么如果我尝试以其他任何方式更改选项,则代码只运行直到结束,屏幕上没有显示任何内容)。
我在网上找到了许多部分解决方案,所以它们都不起作用,有人有全面的解决方案吗?
d3
。https://github.com/d3/d3-force - keithpjolley