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: mauro...@gmail.com 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 Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users