Python有没有交互式绘图库?
我在找一个可以在Python中使用的互动图形库。
这里的“图”指的是一组节点通过一些连接线(边)相连,而不是在x-y坐标轴上绘制的值的图表,也不是像素的网格。
我说的“互动”是指我可以拖动节点的位置,并且我需要能够点击这些节点或连接线,然后这个库能把这些节点或连接线的信息传给我,这样我就可以添加或删除节点,或者显示一些信息(因为我的数据集太大太复杂,所以我不能在一开始就加载完整的图;我只会根据用户的输入加载必要的数据部分)。
提到的Python是指编程语言Python,这个图形库应该能和CPython兼容。我现在有Python 2.7和Python 3.1,但如果需要的话可以降级到2.6。这个语言要求是因为我正在处理的数据集只支持Python。
这个图形库必须支持有向图,并且能够自动布局节点。我需要在节点上添加标签。
最好是布局算法能把相邻的节点放得靠近一点。它应该能在我这台四年旧的笔记本上合理处理100到1000个节点和大约300到4000条连接线(我通常从大约100个节点开始,但数量可能会根据用户输入而增加)。最好是这个库的依赖不太多(可能除了Gnome)。开源的更好。
我已经用Tkinter Canvas写了一个简单的程序原型,但我需要一个更专业的图形库来扩展这个程序。我看过graphviz和matplotlib,但它们似乎只适合处理静态图形,要实现互动操作需要做很多额外的工作(如果我错了请纠正我,我只是简单看过它们)。我也试过把图生成SVG文件,然后用Inkscape查看,但速度太慢,占用内存太多,而且因为连接线数量太多,图形变得很混乱。
4 个回答
我也遇到过同样的问题。最后,我发现nodebox opengl似乎能解决这个问题。
不要尝试使用下面链接中的图形库:
http://nodebox.net/code/index.php/Graph
与nodebox opengl一起使用。这个图形库只适用于mac OSX的nodebox,所以它不管用。不过没关系,因为你其实不需要它。
比如,看看下面这个问题:
里面有个示例代码对我有效,你可以修改这个代码,让你点击一个节点时,不仅可以移动这个节点,还可以修改图形。
只需从代码中删除:
label = "Placeholder"
就可以正常工作了。
编辑:
我在这里放了一些更详细的示例代码:
Nodebox open GL图形,大小函数未被识别。(Ubuntu)看起来Nodebox可能是你想要的工具:
http://nodebox.net/code/index.php/Graph 适用于Mac OSX
http://www.cityinabottle.org/nodebox/ 适用于Windows(使用OpenGL)
这个图形对象也有鼠标交互的功能,这些功能都在
graph.events
对象里。它有以下几个属性:
graph.events.hovered
:None
或者鼠标悬停的节点。graph.events.pressed
:None
或者鼠标按下的节点。graph.events.dragged
:None
或者正在拖动的节点。graph.events.clicked
:None
或者最后点击的节点。graph.events.popup
: 当True
时,会在悬停的节点上显示一个弹出窗口。
我还发现了Gephi,看起来它也可能有你需要的功能。
http://gephi.org/ 适用于Windows、Linux和Mac OSX
Gephi是一个互动可视化和探索平台,适用于各种网络和复杂系统,包括动态和层次图。