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

Reply via email to