Using wx.lib.plot
wxPython has its own plotting library, which provides simple way of drawing large number of data on a canvas. It is convenient to use and it is fast. However you have only one axis per canvas and you can plot 2D graphs only.

To draw a line graph like above, create line objects using numpy
214 x = np.linspace(0,10,500) 215 y = np.sin(x) 216 217 # create lines 218 line1 = wxplot.PolyLine(list(zip(x, np.sin(x))), 219 colour='red', width=3, style=wx.PENSTYLE_DOT_DASH) 220 line2 = wxplot.PolyLine(list(zip(x, -np.sin(x))), 221 colour='blue', width=3, style=wx.PENSTYLE_LONG_DASH)
Then generate a graphics object and render it on the canvas. Here the canvas is implemented on a wxPanel. So you can embed it into any wx.Window object.
1 # create a graphics 2 graphics = wxplot.PlotGraphics([line1, line2]) 3 self.pnlPlot.Draw(graphics)
Using Matplotlib WXAgg backend
For more professional plot, you can use matplotlib, more specifically matplotlib WXAgg backend, where almost all the matplotlib features are available to wx.Python. Thus you can create plots like below very easily.


The WXAgg Figure object and the FigureCanvas object are implemented on a wx.Panel as class members.
40 # mpl figure object 41 self.figure = Figure() 42 # mpl canvas object 43 self.canvas = FigureCanvas(self, -1, self.figure)
The shade plot on the left for example was generated by the code below.
138 # clear previous plot 139 self.pnlPlot.Clear() 140 # acquire new axes 141 ax1 = self.pnlPlot.AddSubPlot(121) 142 # we need figure object too 143 fig = self.pnlPlot.GetFigure() 144 145 # colormap 146 cmap = matplotlib.cm.copper 147 148 # import LightSource 149 from matplotlib.colors import LightSource 150 151 y,x = np.mgrid[-4:2:200j, -4:2:200j] 152 z = 10 * np.cos(x**2 + y**2) 153 ls = LightSource(315, 45) 154 155 rgb = ls.shade(z, cmap) 156 157 ax1.imshow(rgb, interpolation='bilinear') 158 im = ax1.imshow(z, cmap=cmap) 159 #im.remove() 160 #fig.colorbar(im) 161 ax1.set_title('shaded plot')