Python 交互式图形可视化 处境

Python 交互式图形可视化 处境,python,user-interface,Python,User Interface,与之类似,我正在寻找一种方法来创建一个GUI,在这个GUI中,用户能够看到图形(从某种意义上)并与之交互。随着时间的推移,车辆将在图中从无移动到节点。用户应该能够添加节点和边缘,添加车辆并设置其目的地 我已经实现了底层的图形模型和业务逻辑,我只需要一个GUI。这意味着我不需要像Djistra算法那样的图形算法功能 如果可能,解决方案应独立于平台。底层模型是用python编写的,因此GUI解决方案要么需要基于python(最好是基于python),要么应该易于与python接口(可能是IPC) 性

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

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

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

性能是一个问题。它不需要太快,但必须足够快,以跟上底层模型。理论上,图中可能存在的节点、边和车辆的数量没有限制

可能的办法 我查看了各种可视化库:

我已经考虑过使用

我曾考虑过直接画画

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

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

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

问题 是否有任何可视化库符合我的要求?有哪些最适合?我是否错过了其他符合我要求的图书馆?类似于butforpython而不是Java的东西是合适的

与这些库中的一个相反,您对在OpenGL或wxPython中实现这一点有什么看法


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

我的直觉告诉我,使用graphviz之类的工具来渲染图形本身,使用wx来处理UI是一个很好的方法。在OpenGL中重新实现所有的图形绘制看起来像是一个巨大的浪费。使用起来非常方便,所以您可以快速地获得一些功能,并根据需要调整性能。

< P>您可以考虑JavaScript库。它有一些奇妙的交互式图形可视化,并且是用JavaScript编写的,非常适合Web UI

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

当然,您需要一些类似于将d3与python代码接口的东西,因此它可能不适合


关于nmichaels的回答:由于广泛使用GraphViz,我不建议您使用它。它生成漂亮的静态图,但严格无交互作用。

您可能还需要考虑NETWORKXYVIEW:

我最终发现,我所考虑的可视化库无法为沿边缘移动的对象设置动画

我尝试了wxPython,以及它的floatcanvas,发现使用起来非常简单(比OpenGL解决方案简单得多)。这让我可以自由地根据需要设置动画,但没有给我任何包装来显示连接的节点——这是我自己写的


这是一个很老的问题,所以现在可能有其他图书馆满足这一要求,或者可能是我考虑的图书馆已经进步,现在可以做到这一点。如果我今天必须从头开始实现它,我会倾向于试验基于web的UI,潜在地利用web套接字来跟上后端的数据速率。我不知道动画的缩放效果如何——我发现画布和SVG在同时为大量事物制作动画时会变得不稳定。也许WebGL更适合。

谢谢,我就是这么想的。您知道pyGraphViz是否支持沿边缘部分绘制对象并确定单击哪个节点进行交互?GraphViz无法判断单击哪个节点。我不知道它是否支持从输出图片上的坐标到节点。我相信你可以在边上贴标签,但我不知道在更具体的位置有更详细的对象图。据我所知,matplotlib为交互部分提供了挂钩。也许你最好还是破解NetworkX。我正在寻找相同的解决方案,在我读了你的帖子后,我搜索NetworkX的图形和d3使用的JS对象之间的任何连接,正如你可以看到的,更好的解决方案是
NetworkX.readwrite.json\u Graph.node\u link\u data
你介意描述一下你最终使用的框架吗?这将对我(可能还有其他人)非常有帮助,寻找非常相似的东西并探索这些库。当然。我会补充一个答案,这样我们就可以结束这个问题了。