在 Wx 中嵌入

日期2006-04-20(最后修改),2006-01-22(创建)

Matplotlib 可以嵌入到 wxPython 应用程序中,以提供高质量的数据可视化。有两种方法可以实现这一点,直接嵌入和使用嵌入库。

“直接嵌入”是指将 wxPython 后端小部件(继承自 {{{wx.Panel}}}) 直接放入您的应用程序,并使用 matplotlib 的面向对象 API 在其上绘制图形。这种方法由 [http://cvs.sourceforge.net/viewcvs.py/matplotlib/matplotlib/examples/ embedding_in_wx*.py] 示例展示,这些示例随 matplotlib 一起提供。{{{FigureCanvasWx}}} 和 {{{FigureCanvasWxAgg}}} 都没有提供任何用于用户交互的功能,例如显示鼠标下的坐标,因此您需要自己实现这些功能。matplotlib 示例 [http://cvs.sourceforge.net/viewcvs.py/%2Acheckout%2A/matplotlib/matplotlib/examples/wxcursor_demo.py?content-type=text%2Fplain wxcursor_demo.py] 可以帮助您入门。

“嵌入库”通过提供已经支持用户交互和其他功能的绘图小部件,为您节省了大量时间和精力。我知道有两个这样的库

  1. Matt Newville 的 [http://cars9.uchicago.edu/~newville/Python/MPlot/ MPlot] 包支持使用 pylab 风格的 {{{plot()}}} 和 {{{oplot()}}} 方法绘制 2D 线图。

  2. Ken !McIvor 的 [http://agni.phys.iit.edu/~kmcivor/wxmpl/ WxMpl] 模块支持使用 matplotlib 的面向对象 API 绘制所有类型的图形。

每个库都有不同的优点和缺点,因此我建议您评估每个库,并选择最符合您需求的库。

学习面向对象 API

如果你在 wxPython 程序中嵌入 matplotlib,你可能需要在某个时刻使用 Matplotlib 的面向对象 API。放心,它与 pylab API 非常相似,很容易上手。虽然需要处理更多细节,但对于已经使用 wxPython 进行编程的人来说,这并不成问题! ;-)

matplotlib 的 FAQ [http://matplotlib.sourceforge.net/faq.html#OO" 链接] 提供了多个学习 OO API 的资源。一旦你入门了,阅读类文档是最有用的信息来源。[http://matplotlib.sourceforge.net/matplotlib.axes.html#Axes" matplotlib.axes.Axes] 类包含了大多数绘图方法,因此在你学会创建 Figure 之后,它是一个很好的起点。

为了便于理解,一系列 pylab 示例已转换为 OO API。它们在一个演示脚本中可用,该脚本必须从命令行运行。你可以使用任何交互式 matplotlib 后端来显示这些绘图。

一个简单的应用程序

这是一个在 wx 中编写的简单应用程序示例,它将 ["Matplotlib 图形嵌入到 wx 面板中"]。没有工具栏、鼠标点击或任何其他操作,只是一个在面板中绘制的图形。为了确保图形在调整大小期间只重新绘制一次,我们做了一些工作。对于包含许多点的图形,重新绘制可能需要一些时间,因此最好只在图形释放时重新绘制。阅读代码。

章节作者:AndrewStraw,Unknown[94]