From 9d05ef3e40bf9eb5c3eaac6a08adb804382d6842 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 24 Feb 2013 09:43:19 -0700 Subject: [PATCH 1/5] fix warpimage and projection = 'hammer' (issue 100) --- lib/mpl_toolkits/basemap/__init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/basemap/__init__.py b/lib/mpl_toolkits/basemap/__init__.py index 0257443a7..4b73af1c4 100644 --- a/lib/mpl_toolkits/basemap/__init__.py +++ b/lib/mpl_toolkits/basemap/__init__.py @@ -4089,7 +4089,8 @@ def warpimage(self,image="bluemarble",scale=None,**kwargs): # make points outside projection limb transparent. self._bm_rgba_warped = self._bm_rgba_warped.filled(0.) # treat pseudo-cyl projections such as mollweide, robinson and sinusoidal. - elif self.projection in _pseudocyl: + elif self.projection in _pseudocyl: + if self.projection != 'hammer': lonsr,latsr = self(x,y,inverse=True) mask = ma.zeros((ny,nx,4),np.int8) lon_0 = self.projparams['lon_0'] @@ -4112,6 +4113,12 @@ def warpimage(self,image="bluemarble",scale=None,**kwargs): self._bm_rgba_warped = self._bm_rgba_warped.filled(0.) # plot warped rgba image. im = self.imshow(self._bm_rgba_warped,ax=ax,**kwargs) + # for hammer projection, use clip path defined by + # projection limb (patch created in drawmapboundary). + if self.projection == 'hammer': + if not self._mapboundarydrawn: + self.drawmapboundary(color='none',linewidth=None) + im.set_clip_path(self._mapboundarydrawn) else: # bmproj True, no interpolation necessary. im = self.imshow(self._bm_rgba,ax=ax,**kwargs) From 755b790bc551ef483c28982e58dd1c0cc208924f Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 24 Feb 2013 09:44:52 -0700 Subject: [PATCH 2/5] fix warpimage with projection = 'hammer' (issue 100) --- Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Changelog b/Changelog index 4444ef787..053e7c09b 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,7 @@ +since version 1.0.6 +------------------- +* fix warpimage with projection = 'hammer' (issue 100). + version 1.0.6 (git tag v1.0.6rel) -------------------------------- * fix drawcounties for Python 3.3. From cb106bf2e322f14d2bf688f5ea200d6fd01c3ad8 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 24 Feb 2013 09:56:36 -0700 Subject: [PATCH 3/5] fix bug in previous commit --- lib/mpl_toolkits/basemap/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mpl_toolkits/basemap/__init__.py b/lib/mpl_toolkits/basemap/__init__.py index 4b73af1c4..7294c2d1c 100644 --- a/lib/mpl_toolkits/basemap/__init__.py +++ b/lib/mpl_toolkits/basemap/__init__.py @@ -4089,8 +4089,8 @@ def warpimage(self,image="bluemarble",scale=None,**kwargs): # make points outside projection limb transparent. self._bm_rgba_warped = self._bm_rgba_warped.filled(0.) # treat pseudo-cyl projections such as mollweide, robinson and sinusoidal. - elif self.projection in _pseudocyl: - if self.projection != 'hammer': + elif self.projection in _pseudocyl and \ + self.projection != 'hammer': lonsr,latsr = self(x,y,inverse=True) mask = ma.zeros((ny,nx,4),np.int8) lon_0 = self.projparams['lon_0'] From b1b47e45758116b4ab6bb487497f00bd075ceb64 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 24 Feb 2013 10:12:55 -0700 Subject: [PATCH 4/5] add hammer example to test for issue 100 --- examples/warpimage.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/examples/warpimage.py b/examples/warpimage.py index 41a8b1ed6..d4c1cbd0b 100644 --- a/examples/warpimage.py +++ b/examples/warpimage.py @@ -34,6 +34,19 @@ plt.title("Blue Marble image warped from 'cyl' to 'mbtfpq' projection",fontsize=12) print('warp to McBryde-Thomas Flat-Polar Quartic map ...') +# create new figure +fig=plt.figure() +# define projection centered on North America. +m = Basemap(projection='hammer',lon_0=-100,resolution='l') +m.bluemarble(scale=0.5) +# draw coastlines. +m.drawcoastlines(linewidth=0.5,color='0.5') +# draw lat/lon grid lines every 30 degrees. +m.drawmeridians(np.arange(0,360,60),color='0.5') +m.drawparallels(np.arange(-90,90,30),color='0.5') +plt.title("Blue Marble image warped from 'cyl' to 'hammer' projection",fontsize=12) +print('warp to Hammer map ...') + # create new figure fig=plt.figure() # define cylindrical equidistant projection. From 26cb6e03a9640b1bcc32f8049ad6de7d0517d621 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 24 Feb 2013 12:19:36 -0700 Subject: [PATCH 5/5] raise error message when warpimage is used with celestial=True (issue 101) --- lib/mpl_toolkits/basemap/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/mpl_toolkits/basemap/__init__.py b/lib/mpl_toolkits/basemap/__init__.py index 7294c2d1c..c5fdae610 100644 --- a/lib/mpl_toolkits/basemap/__init__.py +++ b/lib/mpl_toolkits/basemap/__init__.py @@ -3982,6 +3982,9 @@ def warpimage(self,image="bluemarble",scale=None,**kwargs): except ImportError: raise ImportError('warpimage method requires PIL (http://www.pythonware.com/products/pil)') from matplotlib.image import pil_to_array + if self.celestial: + msg='warpimage does not work in celestial coordinates' + raise ValueError(msg) ax = kwargs.pop('ax', None) or self._check_ax() # default image file is blue marble next generation # from NASA (http://visibleearth.nasa.gov).