交互式graphics可视化

情况

类似于这个问题 ,我正在寻找一种方法来创build一个GUI,用户可以看到一个graphics(在graphics理论意义上)并与之交互。 随着时间的推移,车辆将从零走向节点。 用户应该能够添加节点和边缘并添加车辆并设置其目的地。

我已经实现了底层图模型和业务逻辑,我只需要一个GUI。 这意味着我不需要图像algorithmfunction,如Djistra的algorithm。

如果可能的话,解决scheme应该是平台独立的。 底层模型是用python编写的,所以GUI解决scheme或者需要基于python(这会更好),或者应该很容易地与python(潜在的IPC)接口。

性能是一个问题。 它不需要非常快速,但它必须足够快,以跟上基础模型。 从概念上讲,图中可能存在的节点,边和车辆的数目没有限制。

可能的方法

我看了各种可视化库:

  • NodeBox
  • NetworkX
  • matplotlib
  • GraphViz的

我曾经打算使用OpenGL 。

我曾想过直接绘制到wxPython 。

问题

我没有使用任何graphics库。 我不知道他们是否有能力提供所需的function。 例如,matplotlib在库中似乎有很多非图论图。 除了通过NetworkX之外,我找不到一个人用它来实现graphics的例子。 又例如,NetworkX可以绘制沿着边缘的对象吗?

OpenGL解决scheme几乎肯定需要更多时间来实现。 我将不得不编写移动对象的边缘自己的function。 我将不得不编写一个function,在正确的位置绘制边缘,并为所有的边缘和节点以及车辆等绘制标签。我需要实现菜单并从头开始处理交互。

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

问题

做任何可视化库符合我的要求? 那些最适合的人呢? 还有其他我错过的图书馆能满足我的要求吗? 像JGraph的东西,但对于Python而不是Java将是合适的。

对于在OpenGL或wxPython中实现这个而不是这些库中的一个,你有什么看法?

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

你可能会考虑JavaScript库d3 。 它具有一些梦幻般的交互式graphics可视化,用JavaScript编写,对Web UI非常有用

我不确定实时图的构buildfunction,但是假定简单的节点和边的添加/删除对于在所选的可视化types之上实现是微不足道的。

当然,你需要类似pyjs的东西来与你的python代码进行接口,所以它可能不适合。

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

我的直觉是,使用像graphviz这样的东西渲染graphics本身和wx来处理你的UI是一个好的方法。 重新实现OpenGL中的所有graphics绘制位似乎是一个巨大的努力浪费。 pyGraphViz非常易于使用,因此您可以快速获得某些function,并根据性能进行调整。

您可能还想考虑networkx_viewer: https : //github.com/jsexauer/networkx_viewer

我最终发现,我考虑的可视化库不能为沿着边缘行进的对象制作animation。

我用wxPython和它的floatcanvas进行了实验,发现相当简单易用(比OpenGL解决scheme要简单得多)。 这让我可以根据自己的需要自由地创作animation,但是在显示连接的节点时没有给我任何包装 – 我必须自己写。

这是一个相当古老的问题,所以现在可能有其他的图书馆满足这个要求,也可能是我认为已经推进的图书馆,现在可以做到这一点。 如果今天我必须从头开始实施,那么我将倾向于尝试一个基于Web的UI,可能利用Web套接字来跟上数据速率的后端。 我不知道animation效果如何,但是我发现Canvas和SVG在一次animation大量的时候会变得不稳定。 也许WebGL会更好。