From 9bd176d3b9d2533d0b41deac6d40f39436b09b8c Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:31:43 +0100 Subject: [PATCH] FIX: make sticky edge tolerance relative to data range --- lib/matplotlib/axes/_base.py | 10 ++-------- .../test_axes/sticky_tolerance_cf.png | Bin 0 -> 6222 bytes lib/matplotlib/tests/test_axes.py | 10 ++++++++++ 3 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/sticky_tolerance_cf.png diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 4606e5c01aec..a29583668a17 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2962,22 +2962,16 @@ def handle_single_axis( # Prevent margin addition from crossing a sticky value. A small # tolerance must be added due to floating point issues with - # streamplot; it is defined relative to x0, x1, x1-x0 but has + # streamplot; it is defined relative to x1-x0 but has # no absolute term (e.g. "+1e-8") to avoid issues when working with # datasets where all values are tiny (less than 1e-8). - tol = 1e-5 * max(abs(x0), abs(x1), abs(x1 - x0)) + tol = 1e-5 * abs(x1 - x0) # Index of largest element < x0 + tol, if any. i0 = stickies.searchsorted(x0 + tol) - 1 x0bound = stickies[i0] if i0 != -1 else None - # Ensure the boundary acts only if the sticky is the extreme value - if x0bound is not None and x0bound > x0: - x0bound = None # Index of smallest element > x1 - tol, if any. i1 = stickies.searchsorted(x1 - tol) x1bound = stickies[i1] if i1 != len(stickies) else None - # Ensure the boundary acts only if the sticky is the extreme value - if x1bound is not None and x1bound < x1: - x1bound = None # Add the margin in figure space and then transform back, to handle # non-linear scales. diff --git a/lib/matplotlib/tests/baseline_images/test_axes/sticky_tolerance_cf.png b/lib/matplotlib/tests/baseline_images/test_axes/sticky_tolerance_cf.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e185c2769d6de5ae19ee2154fc6097a9173a32 GIT binary patch literal 6222 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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 13c181b68492..3791763f323f 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -701,6 +701,16 @@ def test_sticky_tolerance(): axs.flat[3].barh(y=1, width=width, left=-20000.1) +@image_comparison(['sticky_tolerance_cf.png'], remove_text=True, style="mpl20") +def test_sticky_tolerance_contourf(): + fig, ax = plt.subplots() + + x = y = [14496.71, 14496.75] + data = [[0, 1], [2, 3]] + + ax.contourf(x, y, data) + + def test_nargs_stem(): with pytest.raises(TypeError, match='0 were given'): # stem() takes 1-3 arguments. 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