Dear ALL, Greetings. Trying to develop a desktop application for interactive mapping using wxPython and Matplotlib, I have been doing some experiments with embedding maps generated by the Basemap module into a wxPython frame.
Although there are many nice exemples of using Matplotlib graphs in wxWpython and other GUI frontends, I could not find any examples of doing this with the Basemap module. As a quick start, I put together the the code below (adapted from one of the examples available in the Matplotlib website): -- #!/usr/bin/env python import matplotlib import matplotlib.pyplot 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.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 # This functions plots the Basemap 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() map.drawcoastlines() map.drawcountries() map.drawmapboundary() map.fillcontinents(color='lime', lake_color='aqua') map.drawmapboundary(fill_color='aqua') matplotlib.pyplot.show() 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() -- Well, the above code works, but notice that after the Basemap plot is displayed on a usual plotting window, *another*, blank, plotting window appears! Can anyone figure out how to avoid that? Another problem is that the instruction "self.canvas.print_figure('test.png',dpi=100)", if used in place of matplotlib.pyplot.show() method, has not effect and no figure is written to disk. Also, a call to method "self.canvas.draw()" has not effect, either. Any hints? Thanks in advance for any assistance you can provide. With best regards, -- Dr. Mauro J. Cavalcanti Ecoinformatics Studio P.O. Box 46521, CEP 20551-970 Rio de Janeiro, RJ, BRASIL E-mail: [EMAIL PROTECTED] Web: http://studio.infobio.net Linux Registered User #473524 * Ubuntu User #22717 "Life is complex. It consists of real and imaginary parts." ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users