From f063fd27f116887e5a12f3782bed54770f6e4b2e Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 27 Dec 2022 20:45:42 +0000 Subject: [PATCH 1/7] Fix polar transform with non-linear scales --- lib/matplotlib/projections/polar.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/projections/polar.py b/lib/matplotlib/projections/polar.py index 3fbb4d2b9cfd..79c08f32f36e 100644 --- a/lib/matplotlib/projections/polar.py +++ b/lib/matplotlib/projections/polar.py @@ -30,7 +30,7 @@ class PolarTransform(mtransforms.Transform): input_dims = output_dims = 2 def __init__(self, axis=None, use_rmin=True, - _apply_theta_transforms=True): + _apply_theta_transforms=True, *, scale_transform=None): """ Parameters ---------- @@ -46,12 +46,17 @@ def __init__(self, axis=None, use_rmin=True, self._axis = axis self._use_rmin = use_rmin self._apply_theta_transforms = _apply_theta_transforms + self._scale_transform = scale_transform __str__ = mtransforms._make_str_method( "_axis", use_rmin="_use_rmin", _apply_theta_transforms="_apply_theta_transforms") + def _get_rorigin(self): + # Get lower r limit after being scaled by the radial scale transform + return self._scale_transform.transform((0, self._axis.get_rorigin()))[1] + def transform_non_affine(self, tr): # docstring inherited theta, r = np.transpose(tr) @@ -61,7 +66,7 @@ def transform_non_affine(self, tr): theta *= self._axis.get_theta_direction() theta += self._axis.get_theta_offset() if self._use_rmin and self._axis is not None: - r = (r - self._axis.get_rorigin()) * self._axis.get_rsign() + r = (r - self._get_rorigin()) * self._axis.get_rsign() r = np.where(r >= 0, r, np.nan) return np.column_stack([r * np.cos(theta), r * np.sin(theta)]) @@ -85,7 +90,7 @@ def transform_path_non_affine(self, path): # that behavior here. last_td, td = np.rad2deg([last_t, t]) if self._use_rmin and self._axis is not None: - r = ((r - self._axis.get_rorigin()) + r = ((r - self._get_rorigin()) * self._axis.get_rsign()) if last_td <= td: while td - last_td > 360: @@ -877,7 +882,7 @@ def _set_lim_and_transforms(self): # data. This one is aware of rmin self.transProjection = self.PolarTransform( self, - _apply_theta_transforms=False) + _apply_theta_transforms=False, scale_transform=self.transScale) # Add dependency on rorigin. self.transProjection.set_children(self._originViewLim) From e5cfa0f7c0023418a0d424d38413f31741b9f334 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 27 Dec 2022 20:57:11 +0000 Subject: [PATCH 2/7] Add docs for polar transform --- lib/matplotlib/projections/polar.py | 30 +++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/projections/polar.py b/lib/matplotlib/projections/polar.py index 79c08f32f36e..6aa1fe316610 100644 --- a/lib/matplotlib/projections/polar.py +++ b/lib/matplotlib/projections/polar.py @@ -20,9 +20,13 @@ class PolarTransform(mtransforms.Transform): The base polar transform. This transform maps polar coordinates ``(theta, r)`` into Cartesian - coordinates ``(x, y) = (r * cos(theta), r * sin(theta))`` (but does not + coordinates ``(x, y) = (r * cos(theta), r * sin(theta))`` (but does not fully transform into Axes coordinates or handle positioning in screen space). + This transformation is designed to be applied to data after any scaling + along the radial axis (e.g. log-scaling) has been applied to the input + data. + Path segments at a fixed radius are automatically transformed to circular arcs as long as ``path._interpolation_steps > 1``. """ @@ -882,7 +886,9 @@ def _set_lim_and_transforms(self): # data. This one is aware of rmin self.transProjection = self.PolarTransform( self, - _apply_theta_transforms=False, scale_transform=self.transScale) + _apply_theta_transforms=False, + scale_transform=self.transScale + ) # Add dependency on rorigin. self.transProjection.set_children(self._originViewLim) @@ -893,9 +899,25 @@ def _set_lim_and_transforms(self): # The complete data transformation stack -- from data all the # way to display coordinates + # + # 1. Remove any radial axis scaling (e.g. log scaling) + # 2. Shift data in the theta direction + # 3. Project the data from polar to cartesian values + # (with the origin in the same place) + # 4. Scale and translate the cartesian values to Axes coordinates + # (here the origin is moved to the lower left of the Axes) + # 5. Move and scale to fill the Axes + # 6. Convert from Axes coordinates to Figure coordinates self.transData = ( - self.transScale + self.transShift + self.transProjection + - (self.transProjectionAffine + self.transWedge + self.transAxes)) + self.transScale + + self.transShift + + self.transProjection + + ( + self.transProjectionAffine + + self.transWedge + + self.transAxes + ) + ) # This is the transform for theta-axis ticks. It is # equivalent to transData, except it always puts r == 0.0 and r == 1.0 From c8f2017f9b70d6a9a47445cd2cf3760f4643ddd6 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 27 Dec 2022 22:43:50 +0000 Subject: [PATCH 3/7] Add a polar log test --- .../baseline_images/test_polar/polar_log.png | Bin 0 -> 41668 bytes lib/matplotlib/tests/test_polar.py | 12 ++++++++++++ 2 files changed, 12 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_polar/polar_log.png diff --git a/lib/matplotlib/tests/baseline_images/test_polar/polar_log.png b/lib/matplotlib/tests/baseline_images/test_polar/polar_log.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8e20b482a50f651e2ffbb5e6af864f1fdfa8f4 GIT binary patch literal 41668 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 Date: Tue, 27 Dec 2022 22:46:48 +0000 Subject: [PATCH 4/7] Fix line widths --- lib/matplotlib/projections/polar.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/projections/polar.py b/lib/matplotlib/projections/polar.py index 6aa1fe316610..fba167a91519 100644 --- a/lib/matplotlib/projections/polar.py +++ b/lib/matplotlib/projections/polar.py @@ -20,7 +20,8 @@ class PolarTransform(mtransforms.Transform): The base polar transform. This transform maps polar coordinates ``(theta, r)`` into Cartesian - coordinates ``(x, y) = (r * cos(theta), r * sin(theta))`` (but does not fully transform into Axes coordinates or + coordinates ``(x, y) = (r * cos(theta), r * sin(theta))`` + (but does not fully transform into Axes coordinates or handle positioning in screen space). This transformation is designed to be applied to data after any scaling @@ -59,7 +60,8 @@ def __init__(self, axis=None, use_rmin=True, def _get_rorigin(self): # Get lower r limit after being scaled by the radial scale transform - return self._scale_transform.transform((0, self._axis.get_rorigin()))[1] + return self._scale_transform.transform( + (0, self._axis.get_rorigin()))[1] def transform_non_affine(self, tr): # docstring inherited From 6005a513037708abe96de0a0fbb4782bda566be1 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Wed, 28 Dec 2022 22:51:29 +0000 Subject: [PATCH 5/7] Math formatting in PolarTransform docstring --- lib/matplotlib/projections/polar.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/projections/polar.py b/lib/matplotlib/projections/polar.py index fba167a91519..f1ca77845d39 100644 --- a/lib/matplotlib/projections/polar.py +++ b/lib/matplotlib/projections/polar.py @@ -16,11 +16,11 @@ class PolarTransform(mtransforms.Transform): - """ + r""" The base polar transform. - This transform maps polar coordinates ``(theta, r)`` into Cartesian - coordinates ``(x, y) = (r * cos(theta), r * sin(theta))`` + This transform maps polar coordinates :math:`\theta, r` into Cartesian + coordinates :math:`x, y = r \cos(\theta), r \sin(\theta)` (but does not fully transform into Axes coordinates or handle positioning in screen space). From a0d4e6bf397d9a0d78075e86fa220710a48891d9 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 3 Jan 2023 21:47:20 +0000 Subject: [PATCH 6/7] Fix indentation --- lib/matplotlib/projections/polar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/projections/polar.py b/lib/matplotlib/projections/polar.py index f1ca77845d39..3243c76d8661 100644 --- a/lib/matplotlib/projections/polar.py +++ b/lib/matplotlib/projections/polar.py @@ -35,7 +35,7 @@ class PolarTransform(mtransforms.Transform): input_dims = output_dims = 2 def __init__(self, axis=None, use_rmin=True, - _apply_theta_transforms=True, *, scale_transform=None): + _apply_theta_transforms=True, *, scale_transform=None): """ Parameters ---------- From a24daaef9addfb065838dec52d47aec6ad382754 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Thu, 12 Jan 2023 21:11:19 +0100 Subject: [PATCH 7/7] Rename y -> r Co-authored-by: Thomas A Caswell --- lib/matplotlib/tests/test_polar.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/tests/test_polar.py b/lib/matplotlib/tests/test_polar.py index b63c3365f5bf..1f8e6a75baca 100644 --- a/lib/matplotlib/tests/test_polar.py +++ b/lib/matplotlib/tests/test_polar.py @@ -441,8 +441,8 @@ def test_polar_log(): fig = plt.figure() ax = fig.add_subplot(polar=True) - ax.set_yscale('log') - ax.set_ylim(1, 1000) + ax.set_rscale('log') + ax.set_rlim(1, 1000) n = 100 ax.plot(np.linspace(0, 2 * np.pi, n), np.logspace(0, 2, n)) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy