交互式图形可视化

2024-03-28 13:59:24 发布

您现在位置:Python中文网/ 问答频道 /正文

情况

this question类似,我正在寻找一种方法来创建一个GUI,在这个GUI中,用户可以看到一个图形(在graph theory意义上)并与之交互。随着时间的推移,车辆将在图表中从无移动到节点。用户应该能够添加节点和边,添加车辆并设置其目的地。

我已经实现了底层的图形模型和业务逻辑,我只需要一个图形用户界面。这意味着我不需要像Djistra算法那样的图形算法功能。

如果可能,解决方案应该独立于平台。底层模型是用python编写的,因此GUI解决方案要么需要基于python(这是最好的),要么应该很容易与python接口(可能是IPC)。

性能是个问题。它不需要盲目地快速,但必须足够快才能跟上底层模型。在概念上,图中可能出现的节点、边和车辆的数量没有限制。

可能的方法

我看过各种可视化库:

我已经考虑过使用OpenGL

我考虑过直接画到wxPython

问题

我没有使用任何图形库。我不知道他们是否有能力提供所需的功能。例如,matplotlib在图库中似乎有许多非图论图形。除了通过NetworkX,我找不到其他人用它实现图形的例子。例如,NetworkX可以绘制沿边移动的对象吗?

一个OpenGL解决方案几乎肯定需要更多的时间来实现。我必须自己编写用于移动边缘对象的函数。我需要编写一个函数,用于在正确的位置绘制边,并为所有边、节点和车辆等绘制标签。我需要实现菜单并从头开始处理交互。

我不知道如何在wxPython中实现这一点。我只知道如何将它与标准小部件结合使用。更新:我找到了this question,它的答案指向wx.lib.oglwx.lib.floatcanvas作为在纯wxPython中实现解决方案的机制。

问题

是否有任何可视化库满足我的要求?其中,哪个最合适?有没有其他的图书馆我错过了,可以满足我的要求?类似于JGraph但对于Python而不是Java来说是合适的。

您对在OpenGL或wxPython中实现这一点有何看法?

有没有其他我认为不合适的方法?


Tags: 方法用户模型networkx图形节点wxpython绘制
3条回答

您可以考虑使用JavaScript库d3。它有一些奇妙的交互式图形可视化,并且是用JavaScript编写的,这对于Web UI来说非常好

我不确定实时图形的构建能力,但是假设在您选择的可视化类型之上实现简单的节点和边的添加/移除是很简单的。

当然,您需要像pyjs这样的东西来将d3与您的python代码接口,所以它可能不合适。

关于nmichaels的回答:在广泛使用GraphViz之后,我不推荐它用于您的目的。它生成漂亮的静态图表,但严格来说是非交互的。

我的直觉告诉我,使用graphviz这样的东西来呈现图形本身,使用wx来处理UI是一个很好的方法。在OpenGL中重新实现所有的图形绘制位似乎是一个巨大的浪费。pyGraphViz非常容易使用,因此您可能会很快得到一些有用的东西,并根据性能需要进行调整。

您可能还需要考虑networkx_查看器: https://github.com/jsexauer/networkx_viewer

相关问题 更多 >