wxpython使用matplot_测试怎么将MatPlotLib嵌入到wxPython中
展開全部
#?-*-?coding:?utf-8?-*-
###############################################################################
#??wxMPL_test.pyw
#author:?Wu?Xuping
#Date?:?2013-09-15
#測試如何將MatPlotLib嵌入到wxPython中
###############################################################################
import?numpy?as?np
import?wx
import?matplotlib
#?matplotlib采用WXAgg為后臺,將matplotlib嵌入wxPython中
matplotlib.use("WXAgg")
from?matplotlib.backends.backend_wxagg?import?FigureCanvasWxAgg?as?FigureCanvas
from?matplotlib.figure?import?Figure
from?matplotlib.backends.backend_wx?import?NavigationToolbar2Wx?as?NavigationToolbar
######################################################################################
class?MPL_Panel(wx.Panel):
'''''?#MPL_Panel面板,可以繼承或者e69da5e6ba903231313335323631343130323136353331333361313235創建實例'''
def?__init__(self,parent):
wx.Panel.__init__(self,parent=parent,?id=-1)
self.Figure?=?matplotlib.figure.Figure(figsize=(4,3))
self.axes?=?self.Figure.add_axes([0.1,0.1,0.8,0.8])
self.FigureCanvas?=?FigureCanvas(self,-1,self.Figure)
#繼承鼠標移動顯示鼠標處坐標的事件
self.FigureCanvas.mpl_connect('motion_notify_event',self.MPLOnMouseMove)
self.NavigationToolbar?=?NavigationToolbar(self.FigureCanvas)
self.StaticText?=?wx.StaticText(self,-1,label='Show?Help?String')
self.SubBoxSizer?=?wx.BoxSizer(wx.HORIZONTAL)
self.SubBoxSizer.Add(self.NavigationToolbar,proportion?=0,?border?=?2,flag?=?wx.ALL?|?wx.EXPAND)
self.SubBoxSizer.Add(self.StaticText,proportion?=-1,?border?=?2,flag?=?wx.ALL?|?wx.EXPAND)
self.TopBoxSizer?=?wx.BoxSizer(wx.VERTICAL)
self.TopBoxSizer.Add(self.SubBoxSizer,proportion?=-1,?border?=?2,flag?=?wx.ALL?|?wx.EXPAND)
self.TopBoxSizer.Add(self.FigureCanvas,proportion?=-10,?border?=?2,flag?=?wx.ALL?|?wx.EXPAND)
self.SetSizer(self.TopBoxSizer)
#顯示坐標值
def?MPLOnMouseMove(self,event):
ex=event.xdata#這個數據類型是numpy.float64
ey=event.ydata#這個數據類型是numpy.float64
if?ex??and?ey?:
#可以將numpy.float64類型轉化為float類型,否則格式字符串可能會出錯
self.StaticText.SetLabel('%10.5f,%10.5f'?%?(float(ex),float(ey)))
#也可以這樣
#self.StaticText.SetLabel('%s,%s'?%?(ex,ey))
###############################################################################
#??MPL_Frame添加了MPL_Panel的1個實例
###############################################################################
class?MPL_Frame(wx.Frame):
"""MPL_Frame可以繼承,并可修改,或者直接使用"""
def?__init__(self,title="MPL_Frame?Example?In?wxPython",size=(800,500)):
wx.Frame.__init__(self,parent=None,title?=?title,size=size)
self.MPL?=?MPL_Panel(self)
self.Figure?=?self.MPL.Figure
self.axes?=?self.MPL.axes
self.FigureCanvas?=?self.MPL.FigureCanvas
self.RightPanel?=?wx.Panel(self,-1)
#測試按鈕1
self.Button1?=?wx.Button(self.RightPanel,-1,"TestButton",size=(100,40),pos=(10,10))
self.Button1.Bind(wx.EVT_BUTTON,self.Button1Event)
#創建FlexGridSizer
self.FlexGridSizer=wx.FlexGridSizer(?rows=5,?cols=1,?vgap=5,hgap=5)
self.FlexGridSizer.SetFlexibleDirection(wx.BOTH)
#加入Sizer中
self.FlexGridSizer.Add(self.Button1,proportion?=0,?border?=?5,flag?=?wx.ALL?|?wx.EXPAND)
self.RightPanel.SetSizer(self.FlexGridSizer)
self.BoxSizer=wx.BoxSizer(wx.HORIZONTAL)
self.BoxSizer.Add(self.MPL,proportion?=-10,?border?=?2,flag?=?wx.ALL?|?wx.EXPAND)
self.BoxSizer.Add(self.RightPanel,proportion?=0,?border?=?2,flag?=?wx.ALL?|?wx.EXPAND)
self.SetSizer(self.BoxSizer)
#MPL_Frame界面居中顯示
self.Centre(wx.BOTH)
#按鈕事件,用于測試繪圖
def?Button1Event(self,event):
x=np.arange(-10,10,0.25)
y=np.cos(x)
self.axes.plot(x,y,'--b*')
self.axes.grid(True)
self.FigureCanvas.draw()#一定要實時更新
########################################################################
#主程序測試
if?__name__?==?'__main__':
app?=?wx.PySimpleApp()
#frame?=?MPL2_Frame()
frame?=MPL_Frame()
frame.Center()
frame.Show()
app.MainLoop()
總結
以上是生活随笔為你收集整理的wxpython使用matplot_测试怎么将MatPlotLib嵌入到wxPython中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python条形图一直长_条形图的坐标轴
- 下一篇: python网络爬虫入门小程序_Pyth