wxPython框架中的mplot3d

时间:2010-07-29 12:13:22

标签: python wxpython matplotlib

我正在wxPython中编写一个应用程序。按钮“Plot”显示具有3D表面的wxFrame但我无法旋转表面。是否可以旋转放置在wxFrame中的3D绘图?我该怎么办?

示例:

import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx

import wx

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

class CanvasFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self,  None, -1, 'CanvasFrame', size=(550,350))

        self.SetBackgroundColour(wx.NamedColor("WHITE"))

        self.figure = plt.figure()
        self.axes = axes3d.Axes3D(self.figure)
        X, Y, Z = axes3d.get_test_data(0.05)
        self.axes.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
        cset = self.axes.contour(X, Y, Z, zdir='z', offset=-100)
        cset = self.axes.contour(X, Y, Z, zdir='x', offset=-40)
        cset = self.axes.contour(X, Y, Z, zdir='y', offset=40)

        self.canvas = FigureCanvas(self, -1, self.figure)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.SetSizer(self.sizer)
        self.Fit()

        self.add_toolbar()

    def add_toolbar(self):
        self.toolbar = NavigationToolbar2Wx(self.canvas)
        self.toolbar.Realize()
        if wx.Platform == '__WXMAC__':
            self.SetToolBar(self.toolbar)
        else:
            tw, th = self.toolbar.GetSizeTuple()
            fw, fh = self.canvas.GetSizeTuple()
            self.toolbar.SetSize(wx.Size(fw, th))
            self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.toolbar.update()

    def OnPaint(self, event):
        self.canvas.draw()

class App(wx.App):

    def OnInit(self):
        frame = CanvasFrame()
        frame.Show(True)

        return True

app = App(0)
app.MainLoop()

1 个答案:

答案 0 :(得分:2)

你可能会更好地询问wxPython谷歌小组,因为我在那里看到使用matplotlib的人。无论如何,看看matplotlib网站,似乎有一个wxMpl模块可能有所帮助:http://agni.phys.iit.edu/~kmcivor/wxmpl/

我的猜测是,如果matplotlib可以在wx之外旋转绘图,那么你只需要将一些事件从wx传递到matplotlib以使其在wx中工作。