mplot3d в фрейме wxPython - PullRequest
       7

mplot3d в фрейме wxPython

0 голосов
/ 29 июля 2010

Я пишу приложение в wxPython. Кнопка «График» показывает wxFrame с трехмерной поверхностью, но я не могу повернуть поверхность. Можно ли повернуть трехмерный график, помещенный в wxFrame? Как я могу это сделать?

Пример:

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 Ответ

2 голосов
/ 29 июля 2010

Возможно, вам лучше спросить в гугл-группе wxPython, поскольку я видел там людей, использующих matplotlib. В любом случае, глядя на веб-сайт matplotlib, выясняется, что существует модуль wxMpl, который может помочь: http://agni.phys.iit.edu/~kmcivor/wxmpl/

Я предполагаю, что если matplotlib может вращать график за пределами wx, то вам просто нужно передать некоторые события из wx в matplotlib, чтобы он работал внутри wx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...