From 13b45558fac6fdf537924ba520caabf1cac1b1ae Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Sat, 25 Jun 2016 22:26:33 -0700 Subject: [PATCH 1/2] Fix containment and subslice optim. for steps. #6497 set the `_path` attribute of Line2D to the actually drawn path even if the drawstyle is `steps-*`; however containment tests and the subslice optimization for very long paths were not updated accordingly (see #6615). This patch fixes the issues. Note that `contains` returns, for events in a horizontal segment of a "steps-mid" drawstyle plot, the index of the point in the segment, regardless of whether the event occured to the left or the right of that point. --- lib/matplotlib/lines.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index 18a1d8186a8e..cfa6b4d86081 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -479,6 +479,8 @@ def contains(self, mouseevent): else: # If line, return the nearby segment(s) ind = segment_hits(mouseevent.x, mouseevent.y, xt, yt, pixels) + if self._drawstyle.startswith("steps"): + ind //= 2 ind += self.ind_offset @@ -680,7 +682,8 @@ def recache(self, always=False): else: interpolation_steps = 1 xy = STEP_LOOKUP_MAP[self._drawstyle](*self._xy.T) - self._path = Path(np.asarray(xy).T, None, interpolation_steps) + self._path = Path(np.asarray(xy).T, + _interpolation_steps=interpolation_steps) self._transformed_path = None self._invalidx = False self._invalidy = False @@ -693,8 +696,9 @@ def _transform_path(self, subslice=None): """ # Masked arrays are now handled by the Path class itself if subslice is not None: - _steps = self._path._interpolation_steps - _path = Path(self._xy[subslice, :], _interpolation_steps=_steps) + xy = STEP_LOOKUP_MAP[self._drawstyle](*self._xy[subslice, :].T) + _path = Path(np.asarray(xy).T, + _interpolation_steps=self._path._interpolation_steps) else: _path = self._path self._transformed_path = TransformedPath(_path, self.get_transform()) From e7dd0e3e917630a43e760a892765e846d2515a31 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Wed, 29 Jun 2016 00:20:35 -0700 Subject: [PATCH 2/2] Adapt drawstyles test. Remove duplicated test as well. --- .../test_lines/drawstyle_variants.png | Bin 0 -> 10946 bytes lib/matplotlib/tests/test_axes.py | 6 ------ lib/matplotlib/tests/test_lines.py | 20 ++++++++++-------- 3 files changed, 11 insertions(+), 15 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_lines/drawstyle_variants.png diff --git a/lib/matplotlib/tests/baseline_images/test_lines/drawstyle_variants.png b/lib/matplotlib/tests/baseline_images/test_lines/drawstyle_variants.png new file mode 100644 index 0000000000000000000000000000000000000000..8b6d97b7b4079f2e38ab981e63f4ea10fdc5b8e0 GIT binary patch literal 10946 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 478f58441009..1ecc31b40dc8 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -4460,12 +4460,6 @@ def test_ls_ds_conflict(): linestyle='steps-pre:', drawstyle='steps-post') -@cleanup -def test_ls_ds_conflict(): - assert_raises(ValueError, plt.plot, range(32), - linestyle='steps-pre:', drawstyle='steps-post') - - @image_comparison(baseline_images=['date_timezone_x'], extensions=['png']) def test_date_timezone_x(): # Tests issue 5575 diff --git a/lib/matplotlib/tests/test_lines.py b/lib/matplotlib/tests/test_lines.py index 142816cab2b5..0d9151dbd3bb 100644 --- a/lib/matplotlib/tests/test_lines.py +++ b/lib/matplotlib/tests/test_lines.py @@ -118,16 +118,18 @@ def test_valid_linestyles(): line.set_linestyle('aardvark') -@cleanup +@image_comparison(baseline_images=['drawstyle_variants'], remove_text=True, + extensions=["png"]) def test_drawstyle_variants(): - fig = plt.figure() - ax = fig.add_subplot(1, 1, 1) - for ds in ("default", "steps-mid", "steps-pre", "steps-post", - "steps", None): - ax.plot(range(10), drawstyle=ds) - - fig.canvas.draw() - assert True + fig, axs = plt.subplots(6) + dss = ["default", "steps-mid", "steps-pre", "steps-post", "steps", None] + # We want to check that drawstyles are properly handled even for very long + # lines (for which the subslice optimization is on); however, we need + # to zoom in so that the difference between the drawstyles is actually + # visible. + for ax, ds in zip(axs.flat, dss): + ax.plot(range(2000), drawstyle=ds) + ax.set(xlim=(0, 2), ylim=(0, 2)) @cleanup 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