= How to use Matplotlib - Part 1 (Phoenix) = '''Keywords :''' Figure, Axes3D, Line2D, Subplot, FigureCanvasWxAgg, NavigationToolbar2WxAgg, Matplotlib, Pie chart, Bar graph, Line plot, Bar plot, Scatter plot, Histogram, Box plot, Stem plot, Heatmap. <<TableOfContents>> -------- = Demonstrating : = __'''''Tested''' py3.x, wx4.x and Win10. ''__ Are you ready to use some samples ? ;) Test, modify, correct, complete, improve and share your discoveries ! (!) -------- == Matplotlib : == === First example === {{attachment:img_sample_one.png}} {{{#!python # sample_one.py """ Link : https://matplotlib.org/3.3.1/gallery/user_interfaces/embedding_in_wx5_sgskip.html """ import os import sys from numpy import arange, sin, pi import matplotlib matplotlib.use('WXAgg') from matplotlib.figure import Figure from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar2Wx import wx # class MyCanvasPanel # class MyFrame # class MyApp #--------------------------------------------------------------------------- class MyCanvasPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) #------------ # Simplified init method. self.CreateCtrls() self.DoLayout() #----------------------------------------------------------------------- def CreateCtrls(self): """ ... """ self.figure = Figure() self.axes = self.figure.add_subplot(111) #------------ self.canvas = FigureCanvas(self, -1, self.figure) #------------ self.toolbar = NavigationToolbar2Wx(self.canvas) self.toolbar.Realize() def DoLayout(self): """ ... """ sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) self.SetSizer(sizer) self.Fit() def Draw(self): """ ... """ t = arange(0.0, 3.0, 0.01) s = sin(2 * pi * t) self.axes.plot(t, s) #--------------------------------------------------------------------------- class MyFrame(wx.Frame): def __init__(self, title): wx.Frame.__init__(self, None, -1, title, size=(620, 620)) #------------ # Return icons folder. self.icons_dir = wx.GetApp().GetIconsDir() #------------ # Simplified init method. self.SetProperties() self.CreateCtrls() #----------------------------------------------------------------------- def SetProperties(self): """ ... """ self.SetMinSize((620, 620)) #------------ frameIcon = wx.Icon(os.path.join(self.icons_dir, "wxwin.ico"), type=wx.BITMAP_TYPE_ICO) self.SetIcon(frameIcon) def CreateCtrls(self): """ ... """ self.panel = MyCanvasPanel(self) self.panel.Draw() #--------------------------------------------------------------------------- class MyApp(wx.App): def OnInit(self): #------------ self.installDir = os.path.split(os.path.abspath(sys.argv[0]))[0] #------------ frame = MyFrame("Sample one") self.SetTopWindow(frame) frame.Show(True) return True #----------------------------------------------------------------------- def GetInstallDir(self): """ Return the installation directory for my application. """ return self.installDir def GetIconsDir(self): """ Return the icons directory for my application. """ icons_dir = os.path.join(self.installDir, "icons") return icons_dir #--------------------------------------------------------------------------- def main(): app = MyApp(False) app.MainLoop() #--------------------------------------------------------------------------- if __name__ == "__main__" : main() }}} -------- === Second example === {{attachment:img_sample_two.png}} {{{#!python # sample_two.py import os import sys import matplotlib matplotlib.use('WXAgg') from matplotlib.figure import Figure from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar2Wx import wx # class MyCanvasPanel # class MyFrame # class MyApp #--------------------------------------------------------------------------- # Some data # Pie chart, where the slices will be ordered and plotted counter-clockwise : labels = 'Hogs', 'Frogs', 'Logs', 'Dogs' sizes = [15, 30, 45, 10] explode = (0, 0.1, 0, 0) # Only "explode" the 2nd slice (i.e. 'Hogs'). #--------------------------------------------------------------------------- class MyCanvasPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) #------------ # Simplified init method. self.CreateCtrls() self.DoLayout() #----------------------------------------------------------------------- def CreateCtrls(self): """ ... """ self.figure = Figure() self.axes = self.figure.add_subplot(111) #------------ self.canvas = FigureCanvas(self, -1, self.figure) #------------ self.toolbar = NavigationToolbar2Wx(self.canvas) self.toolbar.Realize() def DoLayout(self): """ ... """ sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) self.SetSizer(sizer) self.Fit() def Draw(self): """ ... """ # Make figure and axes. self.axes.plot(1, 0) # To draw the pies. self.axes.pie(sizes, labels=labels, autopct='%1.1f%%', textprops={'size': 'smaller'}, shadow=True, radius=0.5, startangle=90, explode=explode) # Equal aspect ratio ensures that pie is drawn as a circle. self.axes.axis('equal') self.axes.legend(title="Hogs and dogs", loc="center right", bbox_to_anchor=(1, 0, 0, 1)) self.axes.set_title("Raining hogs and dogs", bbox={'facecolor':'0.9', 'pad':8}) #--------------------------------------------------------------------------- class MyFrame(wx.Frame): def __init__(self, title): wx.Frame.__init__(self, None, -1, title, size=(640, 500)) #------------ # Return icons folder. self.icons_dir = wx.GetApp().GetIconsDir() #------------ # Simplified init method. self.SetProperties() self.CreateCtrls() #----------------------------------------------------------------------- def SetProperties(self): """ ... """ self.SetMinSize((640, 500)) #------------ frameIcon = wx.Icon(os.path.join(self.icons_dir, "wxwin.ico"), type=wx.BITMAP_TYPE_ICO) self.SetIcon(frameIcon) def CreateCtrls(self): """ ... """ self.panel = MyCanvasPanel(self) self.panel.Draw() #--------------------------------------------------------------------------- class MyApp(wx.App): def OnInit(self): #------------ self.installDir = os.path.split(os.path.abspath(sys.argv[0]))[0] #------------ frame = MyFrame("Sample two") self.SetTopWindow(frame) frame.Show(True) return True #----------------------------------------------------------------------- def GetInstallDir(self): """ Return the installation directory for my application. """ return self.installDir def GetIconsDir(self): """ Return the icons directory for my application. """ icons_dir = os.path.join(self.installDir, "icons") return icons_dir #--------------------------------------------------------------------------- def main(): app = MyApp(False) app.MainLoop() #--------------------------------------------------------------------------- if __name__ == "__main__" : main() }}} -------- === Third example === {{attachment:img_sample_three.png}} {{{#!python # sample_three.py """ Link : https://white-wheels.hatenadiary.org/entry/20100327/p5 """ import os import sys import numpy as np import matplotlib matplotlib.interactive(True) matplotlib.use('WXAgg') from matplotlib.figure import Figure from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar2Wx from mpl_toolkits.mplot3d import Axes3D import wx # class MyCanvasPanel # class MyFrame # class MyApp #--------------------------------------------------------------------------- class MyCanvasPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) #------------ self.parent = parent #------------ # Simplified init method. self.CreateCtrls() self.DoLayout() #----------------------------------------------------------------------- def CreateCtrls(self): """ ... """ self.figure = Figure() self.figure.set_facecolor((1.,1.,1.)) self.axes = self.figure.add_subplot(111) #------------ self.canvas = FigureCanvas(self, -1, self.figure) # self.canvas.SetBackgroundColour(wx.Colour(100, 100, 100)) #------------ self.toolbar = NavigationToolbar2Wx(self.canvas) self.toolbar.Realize() #------------ self.SetSize() def SetSize(self): """ ... """ size = tuple(self.parent.GetClientSize()) self.canvas.SetSize(740, 740) self.figure.set_size_inches(float(size[0])/self.figure.get_dpi(), float(size[1])/self.figure.get_dpi()) def DoLayout(self): """ ... """ sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.RIGHT| wx.TOP | wx.GROW) sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) self.SetSizer(sizer) self.Fit() def Draw(self): """ ... """ x = np.arange(-3, 3, 0.25) y = np.arange(-3, 3, 0.25) X, Y = np.meshgrid(x, y) Z = np.sin(X)+ np.cos(Y) ax = Axes3D(self.figure) ax.plot_wireframe(X, Y, Z) #--------------------------------------------------------------------------- class MyFrame(wx.Frame): def __init__(self, title): wx.Frame.__init__(self, None, -1, title, size=(740, 740)) #------------ # Return icons folder. self.icons_dir = wx.GetApp().GetIconsDir() #------------ # Simplified init method. self.SetProperties() self.CreateCtrls() #----------------------------------------------------------------------- def SetProperties(self): """ ... """ self.SetMinSize((740, 740)) #------------ frameIcon = wx.Icon(os.path.join(self.icons_dir, "wxwin.ico"), type=wx.BITMAP_TYPE_ICO) self.SetIcon(frameIcon) def CreateCtrls(self): """ ... """ self.panel = MyCanvasPanel(self) self.panel.Draw() #--------------------------------------------------------------------------- class MyApp(wx.App): def OnInit(self): #------------ self.installDir = os.path.split(os.path.abspath(sys.argv[0]))[0] #------------ frame = MyFrame("Sample three") self.SetTopWindow(frame) frame.Show(True) return True #----------------------------------------------------------------------- def GetInstallDir(self): """ Return the installation directory for my application. """ return self.installDir def GetIconsDir(self): """ Return the icons directory for my application. """ icons_dir = os.path.join(self.installDir, "icons") return icons_dir #--------------------------------------------------------------------------- def main(): app = MyApp(False) app.MainLoop() #--------------------------------------------------------------------------- if __name__ == "__main__" : main() }}} -------- === Fourth example === {{attachment:img_sample_four.png}} {{{#!python # sample_four.py """ Link : https://matplotlib.org/3.3.1/gallery/user_interfaces/embedding_in_wx5_sgskip.html """ import os import sys import wx import wx.lib.agw.aui as aui import matplotlib as mpl from matplotlib.backends.backend_wxagg import ( FigureCanvasWxAgg as FigureCanvas, NavigationToolbar2WxAgg as NavigationToolbar) # class MyPlot # class MyPlotNotebook # class Myframe # class MyApp #--------------------------------------------------------------------------- class MyPlot(wx.Panel): def __init__(self, parent, id=-1, dpi=None, **kwargs): wx.Panel.__init__(self, parent, id=id, **kwargs) #------------ self.figure = mpl.figure.Figure(dpi=dpi, figsize=(2, 2)) #------------ self.canvas = FigureCanvas(self, -1, self.figure) #------------ self.toolbar = NavigationToolbar(self.canvas) self.toolbar.Realize() #------------ sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.EXPAND) sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) self.SetSizer(sizer) #--------------------------------------------------------------------------- class MyPlotNotebook(wx.Panel): def __init__(self, parent, id=-1): wx.Panel.__init__(self, parent, id=id) #------------ self.nb = aui.AuiNotebook(self) #------------ sizer = wx.BoxSizer() sizer.Add(self.nb, 1, wx.EXPAND) self.SetSizer(sizer) #----------------------------------------------------------------------- def Add(self, name="plot"): """ ... """ page = MyPlot(self.nb) self.nb.AddPage(page, name) return page.figure #--------------------------------------------------------------------------- class MyFrame(wx.Frame): def __init__(self, title): wx.Frame.__init__(self, None, -1, title, size=(450, 350)) #------------ # Return icons folder. self.icons_dir = wx.GetApp().GetIconsDir() #------------ # Simplified init method. self.SetProperties() self.CreateCtrls() #----------------------------------------------------------------------- def SetProperties(self): """ ... """ self.SetMinSize((450, 350)) #------------ frameIcon = wx.Icon(os.path.join(self.icons_dir, "wxwin.ico"), type=wx.BITMAP_TYPE_ICO) self.SetIcon(frameIcon) def CreateCtrls(self): """ ... """ plotter = MyPlotNotebook(self) axes1 = plotter.Add('figure 1').gca() axes1.plot([1, 2, 3], [2, 1, 4]) axes2 = plotter.Add('figure 2').gca() axes2.plot([1, 2, 3, 4, 5], [2, 1, 4, 2, 3]) #--------------------------------------------------------------------------- class MyApp(wx.App): def OnInit(self): #------------ self.installDir = os.path.split(os.path.abspath(sys.argv[0]))[0] #------------ frame = MyFrame("Sample four") self.SetTopWindow(frame) frame.Show(True) return True #----------------------------------------------------------------------- def GetInstallDir(self): """ Return the installation directory for my application. """ return self.installDir def GetIconsDir(self): """ Return the icons directory for my application. """ icons_dir = os.path.join(self.installDir, "icons") return icons_dir #--------------------------------------------------------------------------- def main(): app = MyApp(False) app.MainLoop() #--------------------------------------------------------------------------- if __name__ == "__main__" : main() }}} -------- = Download source = [[attachment:source.zip]] -------- = Additional Information = '''Link :''' https://matplotlib.org/3.1.3/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py https://matplotlib.org/3.1.3/tutorials/introductory/sample_plots.html https://matplotlib.org/3.1.1/gallery/index.html https://newville.github.io/wxmplot/overview.html https://stackoverflow.com/questions/19898115/wxpython-with-matplotlib https://stackoverflow.com/questions/18769870/matplotlib-wxpython-not-sizing-correctly-with-legend https://discourse.matplotlib.org/t/a-wxpython-matplotlib-basemap-example/10220/10 https://wiki.wxpython.org/MatplotlibEquationEditor https://wiki.wxpython.org/MatplotlibFourierDemo https://intellipaat.com/blog/tutorial/python-tutorial/python-matplotlib/ http://www.python-simple.com/python-matplotlib/pie.php https://umar-yusuf.blogspot.com/2016/08/embedding-matplotlib-figure-in-wxpython.html - - - - - https://wiki.wxpython.org/TitleIndex https://docs.wxpython.org/ -------- = Thanks to = Hatenadiary (sample_three.py coding), Matplotlib.org, the wxPython community... -------- = About this page = Date (d/m/y) Person (bot) Comments : 30/08/20 - Ecco (Created page for wxPython Phoenix). -------- = Comments = - blah, blah, blah....