Dear ALL,
Could you please someone test the attached Python code (of my map
displaying test program written with MPL/Basemap/wxPython) under
MS-Windows and send me a screenshot? I have received reports saying
that the map does not fill the entire figure under MS-Windows;
however, under Ubuntu Linux it appears correctly. I have included a
conditional test before creating the figure when running under
MS-Windows to create a figure twice the size of that created under
Linux.
Thanks in advance!
With warmest regards, and Happy New Year!
--
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."
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Thu Nov 20 17:06:15 2008
# This sample program shows how to read
# geographic coordinates stored in comma-delimited files
# and plot them in a Matplotlib Basemap class object.
# Data files should be formatted as below:
# cities,latitude,longitude
# "Boulder, CO",40.02,-105.16
# "San Diego, CA",32.73,-117.16
# "Washington, DC",38.55,-77.00
# "Whitefish, MT",48.25,-114.21
# "Belize City, Belize",17.29,-88.10
import os
import csv
import wx
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.figure import Figure
from mpl_toolkits.basemap import Basemap
fields = {'cities':0,
'latitude':1,
'longitude':2}
# begin wxGlade: extracode
# end wxGlade
class TMainForm(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: TMainForm.__init__
kwds["style"] = wx.ICONIZE|wx.CAPTION|wx.MINIMIZE|wx.CLOSE_BOX
wx.Frame.__init__(self, *args, **kwds)
self.Splitter = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER)
self.PlotPanel = wx.Panel(self.Splitter, -1)
self.FilePanel = wx.Panel(self.Splitter, -1)
self.Notebook = wx.Notebook(self.FilePanel, -1, style=0)
self.ReportPage = wx.Panel(self.Notebook, -1)
self.FilePage = wx.Panel(self.Notebook, -1)
# Menu Bar
self.MainMenu = wx.MenuBar()
self.FileMenu = wx.Menu()
self.FileOpenItem = wx.MenuItem(self.FileMenu, 102, "&Open...\tCtrl+O", "Open an existing file", wx.ITEM_NORMAL)
self.FileMenu.AppendItem(self.FileOpenItem)
self.FileMenu.AppendSeparator()
self.FileQuitItem = wx.MenuItem(self.FileMenu, wx.ID_EXIT, "&Quit\tCtrl+Q", "Quit the program", wx.ITEM_NORMAL)
self.FileMenu.AppendItem(self.FileQuitItem)
self.MainMenu.Append(self.FileMenu, "&File")
self.OptionsMenu = wx.Menu()
self.OptionsBlueMarbleItem = wx.MenuItem(self.OptionsMenu, 201, "&Blue Marble", "Overlay Blue Marble image", wx.ITEM_CHECK)
self.OptionsMenu.AppendItem(self.OptionsBlueMarbleItem)
self.MainMenu.Append(self.OptionsMenu, "&Options")
self.HelpMenu = wx.Menu()
self.HelpAboutItem = wx.MenuItem(self.HelpMenu, 301, "&About...", "Display general information about the program", wx.ITEM_NORMAL)
self.HelpMenu.AppendItem(self.HelpAboutItem)
self.MainMenu.Append(self.HelpMenu, "&Help")
self.SetMenuBar(self.MainMenu)
# Menu Bar end
self.StatusBar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
self.FileList = wx.ListBox(self.FilePage, -1, choices=[])
self.ReportText = wx.TextCtrl(self.ReportPage, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_MENU, self.OnFileOpen, self.FileOpenItem)
self.Bind(wx.EVT_MENU, self.OnFileQuit, self.FileQuitItem)
self.Bind(wx.EVT_MENU, self.OnOptionsOverlay, self.OptionsBlueMarbleItem)
self.Bind(wx.EVT_MENU, self.OnHelpAbout, self.HelpAboutItem)
self.Bind(wx.EVT_LISTBOX, self.OnSelect, self.FileList)
# end wxGlade
self.Bind(wx.EVT_CHECKLISTBOX, self.EvtCheckListBox, self.FileList)
self.Bind(wx.EVT_SIZE, self.OnSize)
def __set_properties(self):
# begin wxGlade: TMainForm.__set_properties
self.SetTitle("Gaia")
self.SetSize((800, 600))
self.SetFocus()
self.StatusBar.SetStatusWidths([-1, -1])
# statusbar fields
StatusBar_fields = ["Ready", ""]
for i in range(len(StatusBar_fields)):
self.StatusBar.SetStatusText(StatusBar_fields[i], i)
self.FileList.SetMinSize((680, 545))
self.ReportText.SetMinSize((680, 545))
# end wxGlade
self.plot_list = list()
if wx.Platform == "__WXMSW__":
self.figure = Figure(figsize=(10,5), dpi=100, facecolor="white")
else:
self.figure = Figure(figsize=(5,4), dpi=100, facecolor="white")
self.canvas = FigureCanvas(self.PlotPanel, -1, self.figure)
self.ax = self.figure.add_axes([0,0,1,1])
self.SetColor( (255,255,255) )
def __do_layout(self):
# begin wxGlade: TMainForm.__do_layout
sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
sizer_7 = wx.BoxSizer(wx.VERTICAL)
sizer_6 = wx.BoxSizer(wx.VERTICAL)
sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
sizer_9.Add(self.FileList, 0, wx.EXPAND, 0)
self.FilePage.SetSizer(sizer_9)
sizer_8.Add(self.ReportText, 0, wx.EXPAND, 0)
self.ReportPage.SetSizer(sizer_8)
self.Notebook.AddPage(self.FilePage, "Files")
self.Notebook.AddPage(self.ReportPage, "Report")
sizer_6.Add(self.Notebook, 1, wx.EXPAND, 0)
self.FilePanel.SetSizer(sizer_6)
self.PlotPanel.SetSizer(sizer_7)
self.Splitter.SplitVertically(self.FilePanel, self.PlotPanel, 240)
sizer_5.Add(self.Splitter, 1, wx.EXPAND|wx.FIXED_MINSIZE, 0)
self.SetSizer(sizer_5)
self.Layout()
self.Centre()
# end wxGlade
self.Splitter.SetMinimumPaneSize(200)
sizer_7.Add(self.canvas, 1, wx.EXPAND|wx.RIGHT, 0)
self.SetSizer(sizer_7)
self.toolbar = NavigationToolbar2Wx(self.canvas)
self.toolbar.Realize()
tw, th = self.toolbar.GetSizeTuple()
fw, fh = self.canvas.GetSizeTuple()
self.toolbar.SetSize(wx.Size(fw, th))
sizer_7.Add(self.toolbar, 0, wx.GROW)
self.toolbar.update()
self.PlotMap()
def OnFileOpen(self, event): # wxGlade: TMainForm.<event_handler>
dlg = wx.FileDialog(self, "Open", os.getcwd(), "", "Comma-Separated Values files (*.csv)|*.csv", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
fileName = dlg.GetFilename()
dirName = dlg.GetDirectory()
self.SetTitle("Gaia" + " - [" + fileName + "]")
self.FileList.Append(fileName)
dlg.Destroy()
def OnFileQuit(self, event): # wxGlade: TMainForm.<event_handler>
self.Close()
def OnHelpAbout(self, event): # wxGlade: TMainForm.<event_handler>
dlg = wx.MessageDialog(self, "This sample program shows how to read\n"
"geographic coordinates stored in comma-delimited files\n"
"and plot them in a Matplotlib Basemap class object,",
"About Gaia", wx.OK|wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
def OnSelect(self, event): # wxGlade: TMainForm.<event_handler>
dataFile = open(self.FileList.GetStringSelection(), "r")
try:
reader = csv.reader(dataFile, delimiter = ',', quoting=csv.QUOTE_ALL)
longs = []
lats = []
reader.next() # Skip header line
i = 0
for row in reader:
locality = row[fields['cities']]
longitude = float(row[fields['longitude']])
latitude = float(row[fields['latitude']])
longs.append(longitude)
lats.append(latitude)
i = i + 1
finally:
dataFile.close()
self.StatusBar.SetStatusText(str(i) + " record(s) processed", 1)
# Store points in the plot list
index = self.FileList.GetSelection()
self.plot_list.append(self.map.plot(longs,lats,'o'))
plot = self.plot_list[index]
plot[0].set_visible(False)
self.Splitter.SendSizeEvent()
def EvtCheckListBox(self, event):
index = event.GetSelection()
plot = self.plot_list[index]
if self.FileList.IsChecked(index):
plot[0].set_visible(True)
else:
plot[0].set_visible(False)
self.Splitter.SendSizeEvent()
self.FileList.SetSelection(index) # so that (un)checking also selects (moves the highlight)
def SetColor(self, rgbtuple=None):
"""Set figure and canvas colours to be the same."""
if rgbtuple is None:
rgbtuple = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE).Get()
clr = [c/255. for c in rgbtuple]
self.figure.set_facecolor(clr)
self.figure.set_edgecolor(clr)
self.canvas.SetBackgroundColour(wx.Colour(*rgbtuple))
def PlotMap(self, overlay=False):
"""Plot basemap."""
self.PlotPanel.SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
self.ax.cla()
self.map = Basemap(ax=self.ax)
if overlay:
self.map.bluemarble()
self.map.drawcoastlines(color='#777799')
self.map.drawcountries(color='#ccccee')
self.map.drawmapboundary()
else:
self.map.drawcoastlines()
self.map.drawcountries()
self.map.fillcontinents(color="lime", lake_color="aqua")
self.map.drawmapboundary(fill_color="aqua")
self.figure.canvas.draw()
self.PlotPanel.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
def OnSize(self, event):
self.Splitter.SendSizeEvent()
def OnOptionsOverlay(self, event): # wxGlade: TMainForm.<event_handler>
if self.OptionsBlueMarbleItem.IsChecked():
self.PlotMap(overlay=True)
else:
self.PlotMap()
self.Splitter.SendSizeEvent()
# end of class TMainForm
class TApplication(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
MainForm = TMainForm(None, -1, "")
self.SetTopWindow(MainForm)
MainForm.Show()
return True
# end of class TApplication
if __name__ == "__main__":
Application = TApplication(0)
Application.MainLoop()
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users