【问题标题】:mplot3d in wxPython framewxPython 框架中的 mplot3d
【发布时间】:2011-03-22 16:41:37
【问题描述】:

我正在用 wxPython 编写一个应用程序。按钮“绘图”显示带有 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()

【问题讨论】:

    标签: python wxpython matplotlib


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 2023-04-03
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多