Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c142407

Browse files
committed
Merge pull request #4055 from tacaswell/power_norm_fix
BUG : fix PowerNorm with scalars Merging own PR due to prior review by @jenshnielsen
2 parents 26c7d65 + a786cb1 commit c142407

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

lib/matplotlib/colors.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,16 +1168,18 @@ def __call__(self, value, clip=None):
11681168
elif vmin == vmax:
11691169
result.fill(0)
11701170
else:
1171+
res_mask = result.data < 0
11711172
if clip:
11721173
mask = ma.getmask(result)
1173-
val = ma.array(np.clip(result.filled(vmax), vmin, vmax),
1174-
mask=mask)
1174+
result = ma.array(np.clip(result.filled(vmax), vmin, vmax),
1175+
mask=mask)
11751176
resdat = result.data
11761177
resdat -= vmin
11771178
np.power(resdat, gamma, resdat)
11781179
resdat /= (vmax - vmin) ** gamma
1180+
11791181
result = np.ma.array(resdat, mask=result.mask, copy=False)
1180-
result[value < 0] = 0
1182+
result[res_mask] = 0
11811183
if is_scalar:
11821184
result = result[0]
11831185
return result

lib/matplotlib/tests/test_colors.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import six
55

6-
from nose.tools import assert_raises
6+
from nose.tools import assert_raises, assert_equal
77

88
import numpy as np
99
from numpy.testing.utils import assert_array_equal, assert_array_almost_equal
@@ -62,11 +62,29 @@ def test_PowerNorm():
6262
assert_array_almost_equal(norm(a), pnorm(a))
6363

6464
a = np.array([-0.5, 0, 2, 4, 8], dtype=np.float)
65-
expected = [0, 0, 1./16, 1./4, 1]
65+
expected = [0, 0, 1/16, 1/4, 1]
6666
pnorm = mcolors.PowerNorm(2, vmin=0, vmax=8)
6767
assert_array_almost_equal(pnorm(a), expected)
68+
assert_equal(pnorm(a[0]), expected[0])
69+
assert_equal(pnorm(a[2]), expected[2])
6870
assert_array_almost_equal(a[1:], pnorm.inverse(pnorm(a))[1:])
6971

72+
# Clip = True
73+
a = np.array([-0.5, 0, 1, 8, 16], dtype=np.float)
74+
expected = [0, 0, 0, 1, 1]
75+
pnorm = mcolors.PowerNorm(2, vmin=2, vmax=8, clip=True)
76+
assert_array_almost_equal(pnorm(a), expected)
77+
assert_equal(pnorm(a[0]), expected[0])
78+
assert_equal(pnorm(a[-1]), expected[-1])
79+
80+
# Clip = True at call time
81+
a = np.array([-0.5, 0, 1, 8, 16], dtype=np.float)
82+
expected = [0, 0, 0, 1, 1]
83+
pnorm = mcolors.PowerNorm(2, vmin=2, vmax=8, clip=False)
84+
assert_array_almost_equal(pnorm(a, clip=True), expected)
85+
assert_equal(pnorm(a[0], clip=True), expected[0])
86+
assert_equal(pnorm(a[-1], clip=True), expected[-1])
87+
7088

7189
def test_Normalize():
7290
norm = mcolors.Normalize()

0 commit comments

Comments
 (0)