有没有Python的交互式graphics库
我正在寻找一个Python的交互式graphics库。
“ 图 ”是指由一组顶点连接起来的一组节点(不是xy轴上的一个值的图,也不是一个像素的网格)。
通过“交互”,我的意思是我可以拖放节点,我需要能够点击节点/顶点,并让库传递节点/顶点到我的callback,这可能会添加/删除节点/顶点或显示信息(由于数据集太大/复杂,我不能在启动时加载完整的graphics,而是根据用户input只加载必要的数据切片)。
通过Python,我的意思是编程语言Python ,graphics库应该有CPython绑定。 我有Python 2.7和Python 3.1,但可以降级到2.6如果有必要。 这种语言要求是因为我正在使用的数据集只有Python绑定。
graphics库必须支持有向图,并能自动布局节点。 我需要在节点上放置标签。
优选地,布局algorithm应该使相邻的节点彼此靠近。 在我4岁的笔记本电脑上,我应该能够处理100-1000个节点和大约300-4000个顶点(我通常从大约100个节点开始,但是数量可能会根据用户的input而扩大)。 最好它应该是一个没有太多依赖的库(可能除了Gnome)。 开源是首选。
我已经使用Tkinter Canvas编写了一个简单的程序原型,但是我需要一个更严格的graphics库来扩展程序。 我看过graphviz和matplotlib,但显然他们只是用静态graphics工作,显然需要大量的工作来完成交互操作(如果我错了,纠正我,我只是简单地看了一下) 。 我也尝试生成一个SVG文件的graphics,并使用Inkscape来查看它,但它太慢,需要太多的内存,由于顶点的数量,它变成了一个混乱。
看起来像Nodebox可能是你想要的:
http://nodebox.net/code/index.php/Graph Mac OSX
http://www.cityinabottle.org/nodebox/ Windows (使用OpenGL)
graphics对象也具有鼠标交互的function,捆绑在
graph.events
对象中。 它具有以下属性:
graph.events.hovered
:None
或鼠标hover的节点。graph.events.pressed
:None
或鼠标按下的节点。graph.events.dragged
:None
或正在拖动的节点。graph.events.clicked
:None
或最后一个节点被点击。graph.events.popup
:当为True
,将在hover节点上显示一个popup窗口。
还有跨越Gephi,看起来像可能有你想要的function。
http://gephi.org/ Windows , Linux和Mac OSX
Gephi是一个交互式的可视化和探索平台,适用于各种networking和复杂系统,dynamic和分层graphics。
如果没有,你一定要看igraph库。
这是一个强大的库,可以处理大图和不同的布局风格。 根据特征列表,它也可以用于有向图和2D和3D中的交互式和非交互式可视化。 还有一个教程 。
更新:另一个着名的库是NetworkX ,在这里有Python包。 请注意,由Acorn推荐的Mac / Windows软件Nodebox使用NetworkXalgorithm。
我也有同样的问题。 最后,我认为nodebox的opengl似乎是诀窍。 不要尝试在以下链接中使用graphics库
http://nodebox.net/code/index.php/Graph
与nodebox的opengl。 它不起作用,该图库只与mac OSX nodebox兼容。 但是在任何情况下都可以,因为你不需要它。
例如看下面的问题:
将标签添加到节点框opnegl中graphics的边缘
它显示了适用于我的示例代码,可以修改代码,以便点击节点不仅可以移动节点,还可以修改graphics。
只需删除
label = "Placeholder"
从代码和它的作品。
编辑:
我在这里放了一些更详细的示例代码: Nodebox打开GL Graph,尺寸函数无法识别。 (Ubuntu的)