python-matplotlib/0005-Backport-PR-20488-FIX-Include-0-when-checking-lognor.patch
2021-08-09 21:40:15 -04:00

71 lines
2.9 KiB
Diff

From 982f5255e5da9c5023ca9997aff78c86eb0e8000 Mon Sep 17 00:00:00 2001
From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
Date: Thu, 24 Jun 2021 01:45:04 -0400
Subject: [PATCH 5/6] Backport PR #20488: FIX: Include 0 when checking lognorm
vmin
Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
---
lib/matplotlib/image.py | 6 +++---
lib/matplotlib/tests/test_image.py | 19 ++++++++++---------
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py
index 98e2b5eb79..efa50758da 100644
--- a/lib/matplotlib/image.py
+++ b/lib/matplotlib/image.py
@@ -534,9 +534,9 @@ class _ImageBase(martist.Artist, cm.ScalarMappable):
# we have re-set the vmin/vmax to account for small errors
# that may have moved input values in/out of range
s_vmin, s_vmax = vrange
- if isinstance(self.norm, mcolors.LogNorm):
- if s_vmin < 0:
- s_vmin = max(s_vmin, np.finfo(scaled_dtype).eps)
+ if isinstance(self.norm, mcolors.LogNorm) and s_vmin <= 0:
+ # Don't give 0 or negative values to LogNorm
+ s_vmin = np.finfo(scaled_dtype).eps
with cbook._setattr_cm(self.norm,
vmin=s_vmin,
vmax=s_vmax,
diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py
index 9657968de7..38182f5a8a 100644
--- a/lib/matplotlib/tests/test_image.py
+++ b/lib/matplotlib/tests/test_image.py
@@ -1213,23 +1213,24 @@ def test_imshow_quantitynd():
fig.canvas.draw()
+@pytest.mark.parametrize('x', [-1, 1])
@check_figures_equal(extensions=['png'])
-def test_huge_range_log(fig_test, fig_ref):
- data = np.full((5, 5), -1, dtype=np.float64)
+def test_huge_range_log(fig_test, fig_ref, x):
+ # parametrize over bad lognorm -1 values and large range 1 -> 1e20
+ data = np.full((5, 5), x, dtype=np.float64)
data[0:2, :] = 1E20
ax = fig_test.subplots()
- im = ax.imshow(data, norm=colors.LogNorm(vmin=100, vmax=data.max()),
- interpolation='nearest', cmap='viridis')
+ ax.imshow(data, norm=colors.LogNorm(vmin=1, vmax=data.max()),
+ interpolation='nearest', cmap='viridis')
- data = np.full((5, 5), -1, dtype=np.float64)
+ data = np.full((5, 5), x, dtype=np.float64)
data[0:2, :] = 1000
- cmap = copy(plt.get_cmap('viridis'))
- cmap.set_under('w')
ax = fig_ref.subplots()
- im = ax.imshow(data, norm=colors.Normalize(vmin=100, vmax=data.max()),
- interpolation='nearest', cmap=cmap)
+ cmap = plt.get_cmap('viridis').with_extremes(under='w')
+ ax.imshow(data, norm=colors.Normalize(vmin=1, vmax=data.max()),
+ interpolation='nearest', cmap=cmap)
@check_figures_equal()
--
2.31.1