From 46966d8fe65479bc574ea2752a722a1dd73d4a00 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Sun, 25 Dec 2022 22:56:12 +0000 Subject: [PATCH 1/2] Re-cache Line2D if transformation changes --- lib/matplotlib/lines.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index 5e5c19c9f69f..6c9c92e86af3 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -420,6 +420,7 @@ def __init__(self, xdata, ydata, *, self._xy = None self._path = None self._transformed_path = None + self._transform_when_path_transformed = None self._subslice = False self._x_filled = None # used in subslicing; only x is needed @@ -721,6 +722,7 @@ def _transform_path(self, subslice=None): _interpolation_steps=self._path._interpolation_steps) else: _path = self._path + self._transform_when_path_transformed = self.get_transform().frozen() self._transformed_path = TransformedPath(_path, self.get_transform()) def _get_transformed_path(self): @@ -742,7 +744,7 @@ def draw(self, renderer): if not self.get_visible(): return - if self._invalidy or self._invalidx: + if self._invalidy or self._invalidx or self.get_transform() != self._transform_when_path_transformed: self.recache() self.ind_offset = 0 # Needed for contains() method. if self._subslice and self.axes: From 2ff5b81407b69e0b356d9f1320200d5bb2cde88b Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 26 Dec 2022 09:11:23 +0000 Subject: [PATCH 2/2] Add test for polar limit changing --- lib/matplotlib/tests/test_polar.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/matplotlib/tests/test_polar.py b/lib/matplotlib/tests/test_polar.py index ad1540a36621..713002804c9f 100644 --- a/lib/matplotlib/tests/test_polar.py +++ b/lib/matplotlib/tests/test_polar.py @@ -454,3 +454,27 @@ def test_polar_neg_theta_lims(): ax.set_thetalim(-np.pi, np.pi) labels = [l.get_text() for l in ax.xaxis.get_ticklabels()] assert labels == ['-180°', '-135°', '-90°', '-45°', '0°', '45°', '90°', '135°'] + + +@check_figures_equal(extensions=["png"]) +def test_polar_lim_draw(fig_test, fig_ref): + """ + Check that lines on polar axes are correctly transformed after + a draw and an axes limit change. + + """ + # A quarter arc at r=5 + theta = np.linspace(0, np.pi/2, 90) + r = np.full(90, 5) + + ax_ref = fig_ref.add_subplot(projection='polar') + ax_ref.set_ylim(0, 10) + ax_ref.plot(theta, r) + + ax_test = fig_test.add_subplot(projection='polar') + ax_test.set_ylim(4, 10) + + ax_test.plot(theta, r) + fig_test.canvas.draw() + + ax_test.set_ylim(0, 10)