如何避免在嵌入式qt4 GUI中导入pyplot?

时间:2016-07-06 02:59:06

标签: python-2.7 matplotlib pyqt4

"根据此SO note,嵌入时不应导入pyplot。它做了一些时髦的事情,例如使用自己的主循环运行自己的GUI。"

如果是这样,如何在不调用plt.axes()的情况下传递Slider所需的matplotlib.axes._axes.Axes参数? 在GUI based on matplotlib documentation中,我们[添加了以下内容以包含滑块]:

 def compute_initial_figure(self):
        ymax = 300
        window_size=1
        res= 0.1
        ax= self.axes
        t = np.arange(0.0, 100.0, 0.1)
        s = np.sin(2*np.pi*t)
        ax.plot(t, s)
        ax.axis([0, window_size, -ymax, ymax])
        ax.get_xaxis().get_major_formatter().set_useOffset(False)
        axcolor = 'lightgoldenrodyellow'
        axpos = plt.axes([.1, .1, 0.75, 0.05], axisbg=axcolor) #MAKES OWN FIG!
        spos = Slider(axpos, 'Time', res, t[-1], valinit=0)
        spos.on_changed(update)

axpos线使用plt并创建与Qt窗口分开的自己的图形。注意plt.axes返回一个matplotlib.axes._axes.Axes对象而不是matplotlib.axes._subplots.AxesSubplot对象。

类似问题:
When matplotlib is embedded in PyQt4 how are axes/subplots labelled without using pyplot?
Combining PyQt and Matplotlib

1 个答案:

答案 0 :(得分:1)

plt.axes函数通过获取当前数字然后调用figure.add_axes将轴添加到当前数字。您不必获取当前数字,而是在创建时必须保留对该数字的引用。如果你看http://matplotlib.org/examples/user_interfaces/embedding_in_qt4.html,你可以看到如何创建一个数字。我会把这个例子作为一个起点。

因此,要保持对该图的引用,请将相关行更改为:

self.fig = Figure(figsize=(width, height), dpi=dpi)

然后像这样调用add_axes方法:

axpos = self.fig.add_axes([.1, .1, 0.75, 0.05], axisbg=axcolor)