交互图形可视化

Spy*_*cho 43 python user-interface

情况

此问题类似,我正在寻找一种创建GUI的方法,用户可以在其中查看图形(在图论的意义上)并与之交互.随着时间的推移,车辆将从一个节点移动到另一个节点.用户应该能够添加节点和边缘并添加车辆并设置其目的地.

我已经实现了底层的图模型和业务逻辑,我只需要一个GUI.这意味着我不需要图形算法功能,例如Djistra的算法.

如果可能,解决方案应该与平台无关.底层模型是用python编写的,因此GUI解决方案要么是基于python的(哪个更好),要么应该很容易与python(可能是IPC)接口.

性能是一个问题.它不需要快速,但它必须足够快以跟上底层模型.从概念上讲,图表中可能存在的节点,边缘和车辆的数量没有限制.

可能的方法

我查看了各种可视化库:

我已经考虑过使用OpenGL.

我曾想过直接画到wxPython.

问题

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

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

我不确定如何在wxPython中实现它.我只知道如何将它与标准小部件结合使用.更新:我发现这个问题有一个答案,它指向wx.lib.oglwx.lib.floatcanvas作为在纯wxPython中实现解决方案的机制.

问题

任何可视化库是否符合我的要求?那些最适合的人呢?是否有其他我错过的图书馆符合我的要求?像JGraph这样的东西,但对于Python而不是Java来说是合适的.

您对在OpenGL或wxPython中实现此操作有何看法,而不是其中一个库?

是否有其他方法我认为您认为不合适?

Kom*_*ave 8

您可以考虑使用JavaScript库d3.它有一些很棒的交互式图形可视化,并且用JavaScript编写,非常适合Web UI

我不确定实时图形构建功能,但假设在您选择的可视化类型之上实现简单的节点和边缘添加/删除是微不足道的.

当然,你需要像pyjs一样将d3与你的python代码连接起来,所以它可能不合适.

关于nmichaels的答案:广泛使用GraphViz,我不会为你的目的推荐它.它生成漂亮的静态图,但严格来说是非交互式的.


Spy*_*cho 1

我最终发现我考虑的可视化库无法为沿着边缘移动的对象制作动画。

我尝试了wxPython及其floatcanvas,发现使用起来相当简单(比 OpenGL 解决方案简单得多)。这让我可以根据需要自由地制作动画,但没有为我提供任何显示连接节点的包装器 - 我必须自己编写。

这是一个相当老的问题,所以现在可能有其他库可以满足这个要求,或者我考虑的库已经先进并且现在可以做到这一点。如果我今天必须从头开始实现它,我会倾向于尝试基于 Web 的 UI,可能会利用 Web 套接字来跟上后端的数据速率。我不知道动画的缩放效果如何 - 我发现 Canvas 和 SVG 在同时对大量内容进行动画处理时会变得不稳定。也许 WebGL 更适合。