from __future__ import (absolute_import, division, print_function) #!/usr/bin/env python """ An example of how to use wx or wxagg in an application with the Basemap module """ from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.backends.backend_wx import NavigationToolbar2Wx from matplotlib.figure import Figure from mpl_toolkits.basemap import Basemap from wx import * class CanvasFrame(Frame): def __init__(self): Frame.__init__(self,None,-1, 'CanvasFrame',size=(550,350)) self.SetBackgroundColour(NamedColor("WHITE")) self.figure = Figure() self.canvas = FigureCanvas(self, -1, self.figure) self.ax = self.figure.add_subplot(111) self.sizer = BoxSizer(VERTICAL) self.sizer.Add(self.canvas, 1, LEFT | TOP | GROW) self.SetSizer(self.sizer) self.Fit() self.add_toolbar() # comment this out for no toolbar self.plot_map() def add_toolbar(self): self.toolbar = NavigationToolbar2Wx(self.canvas) self.toolbar.Realize() if Platform == '__WXMAC__': # Mac platform (OSX 10.3, MacPython) does not seem to cope with # having a toolbar in a sizer. This work-around gets the buttons # back, but at the expense of having the toolbar at the top self.SetToolBar(self.toolbar) else: # On Windows platform, default window size is incorrect, so set # toolbar width to figure width. tw, th = self.toolbar.GetSizeTuple() fw, fh = self.canvas.GetSizeTuple() # By adding toolbar in sizer, we are able to put it at the bottom # of the frame - so appearance is closer to GTK version. # As noted above, doesn't work for Mac. self.toolbar.SetSize(Size(fw, th)) self.sizer.Add(self.toolbar, 0, LEFT | EXPAND) # update the axes menu on the toolbar self.toolbar.update() def plot_map(self): map = Basemap(ax=self.ax) map.drawcoastlines() map.drawcountries() map.drawmapboundary() map.fillcontinents(color='coral', lake_color='aqua') map.drawmapboundary(fill_color='aqua') self.figure.canvas.draw() class App(App): def OnInit(self): 'Create the main window and insert the custom frame' frame = CanvasFrame() frame.Show(True) return True app = App(0) app.MainLoop()