From 6c4985aaca960eb422cf766a342e0b393d8b6ad6 Mon Sep 17 00:00:00 2001 From: ecamp Date: Mon, 5 Nov 2012 14:06:32 +0000 Subject: [PATCH 1/4] Changed default CRS for set_extent so it is no longer geodetic version of projection. --- lib/cartopy/mpl_integration/geoaxes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/cartopy/mpl_integration/geoaxes.py b/lib/cartopy/mpl_integration/geoaxes.py index 96c236a5c..d9c89a98f 100644 --- a/lib/cartopy/mpl_integration/geoaxes.py +++ b/lib/cartopy/mpl_integration/geoaxes.py @@ -525,12 +525,15 @@ def set_extent(self, extents, crs=None): coordinate system. If no crs is given, the extents' coordinate system will be assumed - to be the Geodetic version of this axes' projection. + to be this axes' projection. """ # TODO: Implement the same semantics as plt.xlim and # plt.ylim - allowing users to set None for a minimum and/or # maximum value + if crs is None: + crs = self.projection + x1, x2, y1, y2 = extents domain_in_crs = shapely.geometry.LineString([[x1, y1], [x2, y1], [x2, y2], [x1, y2], From 9a1e9e335581fdbcd394cfcd8031543acabe77da Mon Sep 17 00:00:00 2001 From: ecamp Date: Tue, 6 Nov 2012 12:57:49 +0000 Subject: [PATCH 2/4] Correction to get_extent doctring regarding default CRS. --- lib/cartopy/mpl_integration/geoaxes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cartopy/mpl_integration/geoaxes.py b/lib/cartopy/mpl_integration/geoaxes.py index d9c89a98f..84b27508e 100644 --- a/lib/cartopy/mpl_integration/geoaxes.py +++ b/lib/cartopy/mpl_integration/geoaxes.py @@ -468,8 +468,8 @@ def get_extent(self, crs=None): Get the extent (x0, x1, y0, y1) of the map in the given coordinate system. - If no crs is given, the returned extents' coordinate system will be - assumed to be the Geodetic version of this axes' projection. + If not crs is given, the returned extent will be in this projection's + native coordinate system. """ p = self._get_extent_geom(crs) From 8c1cdfd837de99f6d9283a7284775b0042f9fe53 Mon Sep 17 00:00:00 2001 From: ecamp Date: Fri, 16 Nov 2012 14:29:33 +0000 Subject: [PATCH 3/4] Changed extents to extent. --- lib/cartopy/mpl_integration/geoaxes.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/cartopy/mpl_integration/geoaxes.py b/lib/cartopy/mpl_integration/geoaxes.py index 84b27508e..b7d536e3e 100644 --- a/lib/cartopy/mpl_integration/geoaxes.py +++ b/lib/cartopy/mpl_integration/geoaxes.py @@ -273,7 +273,7 @@ def draw(self, renderer=None, inframe=False): been set. """ - # if no data has been added, and no extents set, then make the + # if no data has been added, and no extent set, then make the # map global if self.ignore_existing_data_limits and \ self._autoscaleXon and self._autoscaleYon: @@ -468,8 +468,8 @@ def get_extent(self, crs=None): Get the extent (x0, x1, y0, y1) of the map in the given coordinate system. - If not crs is given, the returned extent will be in this projection's - native coordinate system. + If no crs is given, the coordinate system of the returned extent will + be this axes' projection. """ p = self._get_extent_geom(crs) @@ -519,12 +519,12 @@ def _get_extent_geom(self, crs=None): return domain_in_crs - def set_extent(self, extents, crs=None): + def set_extent(self, extent, crs=None): """ Set the extent (x0, x1, y0, y1) of the map in the given coordinate system. - If no crs is given, the extents' coordinate system will be assumed + If no crs is given, the extent's coordinate system will be assumed to be this axes' projection. """ @@ -534,7 +534,7 @@ def set_extent(self, extents, crs=None): if crs is None: crs = self.projection - x1, x2, y1, y2 = extents + x1, x2, y1, y2 = extent domain_in_crs = shapely.geometry.LineString([[x1, y1], [x2, y1], [x2, y2], [x1, y2], [x1, y1]]) @@ -552,8 +552,8 @@ def set_global(self): In some cases where the projection has a limited sensible range the ``set_global`` method does not actually make the whole globe - visible. Instead, the most appropriate extents will be used (e.g. - Ordnance Survey UK will set the extents to be around the British + visible. Instead, the most appropriate extent will be used (e.g. + Ordnance Survey UK will set the extent to be around the British Isles. """ From cb1f697d213734e067ba3ce76b3a39e222e19cb2 Mon Sep 17 00:00:00 2001 From: ecamp Date: Fri, 16 Nov 2012 15:45:19 +0000 Subject: [PATCH 4/4] Added tests for GeoAxes.get_extent() and GeoAxes.set_extent(). --- .../test_set_extent/set_extent_wrapping.png | Bin 0 -> 69347 bytes lib/cartopy/tests/mpl/test_get_extent.py | 82 ++++++++++++++++++ lib/cartopy/tests/mpl/test_mpl_integration.py | 2 +- lib/cartopy/tests/mpl/test_set_extent.py | 37 +++++++- 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 lib/cartopy/tests/mpl/baseline_images/mpl/test_set_extent/set_extent_wrapping.png create mode 100644 lib/cartopy/tests/mpl/test_get_extent.py diff --git a/lib/cartopy/tests/mpl/baseline_images/mpl/test_set_extent/set_extent_wrapping.png b/lib/cartopy/tests/mpl/baseline_images/mpl/test_set_extent/set_extent_wrapping.png new file mode 100644 index 0000000000000000000000000000000000000000..2795fb91e3c6f5db78ed8c80e4a1beb7bfe5d352 GIT binary patch literal 69347 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 literal 0 HcmV?d00001 diff --git a/lib/cartopy/tests/mpl/test_get_extent.py b/lib/cartopy/tests/mpl/test_get_extent.py new file mode 100644 index 000000000..70d9c636d --- /dev/null +++ b/lib/cartopy/tests/mpl/test_get_extent.py @@ -0,0 +1,82 @@ +# (C) British Crown Copyright 2011 - 2012, Met Office +# +# This file is part of cartopy. +# +# cartopy is free software: you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the +# Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cartopy is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with cartopy. If not, see . +import unittest +import warnings + +import matplotlib.pyplot as plt +from numpy.testing import assert_array_almost_equal + +import cartopy.crs as ccrs + +class TestGetExtent(unittest.TestCase): + def test_get_extent(self): + # Set up known extent around the UK. + uk = (-12.5, 4., 49., 60.) + uk_crs = ccrs.Geodetic() + projection = ccrs.Mollweide() + ax = plt.axes(projection=projection) + ax.set_extent(uk, crs=uk_crs) + + # Result of get_extent with no specified coordinate system should be + # in the projection of the axes (Mollweide in this case). + assert_array_almost_equal(ax.get_extent(), ax.get_extent(projection)) + + # Obtain the extent in a range of projections and check against + # expected values. + + # Mollweide + expected = (-963125.8421709834, 308200.26949471474, + 5768352.350108459, 6876758.993328802) + extent = ax.get_extent(ccrs.Mollweide()) + assert_array_almost_equal(extent, expected) + + # Geodetic (should raise warning, but still give the PlateCarree result). + expected_plate_carree = (-14.850129, 4.752041, 49., 60.) + expected = expected_plate_carree + with warnings.catch_warnings(): + # Check for warning. + warnings.simplefilter('error') + with self.assertRaises(UserWarning): + ax.get_extent(ccrs.Geodetic()) + # Check result. + warnings.simplefilter('ignore') + extent = ax.get_extent(ccrs.Geodetic()) + assert_array_almost_equal(extent, expected) + + # PlateCarree + expected = expected_plate_carree + extent = ax.get_extent(ccrs.PlateCarree()) + assert_array_almost_equal(extent, expected) + + # PlateCarree with nonzero central_longitude + central_longitude = 20 + expected = (expected_plate_carree[0] - central_longitude, + expected_plate_carree[1] - central_longitude, + expected_plate_carree[2], + expected_plate_carree[3]) + extent = ax.get_extent(ccrs.PlateCarree(central_longitude)) + assert_array_almost_equal(extent, expected) + + # NorthPolarStereo + expected = (-1034046.2256626057, 333263.47741164186, + -4765889.766015143, -3311994.6422885) + extent = ax.get_extent(ccrs.NorthPolarStereo()) + assert_array_almost_equal(extent, expected) + + +if __name__ == '__main__': + unittest.main() diff --git a/lib/cartopy/tests/mpl/test_mpl_integration.py b/lib/cartopy/tests/mpl/test_mpl_integration.py index 6af19b161..c8c72af48 100644 --- a/lib/cartopy/tests/mpl/test_mpl_integration.py +++ b/lib/cartopy/tests/mpl/test_mpl_integration.py @@ -307,7 +307,7 @@ def test_pcolormesh_limited_area_wrap(): ax = plt.subplot(223, projection=ccrs.PlateCarree(180)) plt.pcolormesh(x, y, data, transform=rp, cmap='Set1') ax.coastlines() - ax.set_extent([-70, 0, 0, 80]) + ax.set_extent([-70, 0, 0, 80], ccrs.Geodetic()) ax = plt.subplot(224, projection=rp) plt.pcolormesh(xbnds, ybnds, data, transform=rp, cmap='Set1') diff --git a/lib/cartopy/tests/mpl/test_set_extent.py b/lib/cartopy/tests/mpl/test_set_extent.py index 903ca7e7f..efdb5f704 100644 --- a/lib/cartopy/tests/mpl/test_set_extent.py +++ b/lib/cartopy/tests/mpl/test_set_extent.py @@ -21,7 +21,7 @@ from numpy.testing import assert_array_almost_equal import cartopy.crs as ccrs - +from cartopy.tests.mpl import ImageTesting @cleanup def test_extents(): @@ -51,7 +51,40 @@ def test_extents(): np.array([[-17.17698577, 48.21879707], [ 5.68924381, 60.54218893]]) ) - + +@ImageTesting(['set_extent_wrapping']) +def test_wrapping(): + # Tests that set_extent() handles longitudes in 0 to 360 format + # and that an extent that crosses the boundary is handled appropriately. + fig = plt.figure(figsize=(10, 6)) + + # Extent of Australia region in 0 to 360. + extent_0_to_360 = (85.0, 220.0, -55.0, 20.0) + + # In PlateCarree(180) Australia region is central and + # should not wrap. 0 to 360 conversion should be handled implicitly. + ax = fig.add_subplot(2, 2, 1, projection=ccrs.PlateCarree(180)) + ax.coastlines() + ax.set_extent(extent_0_to_360, ccrs.PlateCarree()) + + # In PlateCarree() the region crosses the boundary so the result + # should be a -180 to 180 strip covering -55 to 20 deg lat. + ax = fig.add_subplot(2, 2, 2, projection=ccrs.PlateCarree()) + ax.coastlines() + ax.set_extent(extent_0_to_360, ccrs.PlateCarree()) + + # The extent when expressed in the projection of the axes + # should not require the crs to be specified. + extent = (-95.0, 40.0, -55.0, 20.0) + ax = fig.add_subplot(2, 2, 3, projection=ccrs.PlateCarree(180)) + ax.coastlines() + ax.set_extent(extent) + + # If we do set the crs explicitly we should still get the same result as + # the previous plot. + ax = fig.add_subplot(2, 2, 4, projection=ccrs.PlateCarree(180)) + ax.coastlines() + ax.set_extent(extent, ccrs.PlateCarree(180)) def test_update_lim(): # check that the standard data lim setting works