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

Skip to content

Commit cd5ef34

Browse files
dstansbyMeeseeksDev[bot]
authored and
MeeseeksDev[bot]
committed
Backport PR #9743: FIX: check if contour level in format dictionary, or return a default
1 parent 118d2e4 commit cd5ef34

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

lib/matplotlib/contour.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def get_text(self, lev, fmt):
322322
return lev
323323
else:
324324
if isinstance(fmt, dict):
325-
return fmt[lev]
325+
return fmt.get(lev, '%1.3f')
326326
elif callable(fmt):
327327
return fmt(lev)
328328
else:

lib/matplotlib/tests/test_contour.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,25 @@ def test_contour_empty_levels():
143143
assert len(record) == 1
144144

145145

146+
def test_contour_badlevel_fmt():
147+
# test funny edge case from
148+
# https://github.com/matplotlib/matplotlib/issues/9742
149+
# User supplied fmt for each level as a dictionary, but
150+
# MPL changed the level to the minimum data value because
151+
# no contours possible.
152+
# This would error out pre
153+
# https://github.com/matplotlib/matplotlib/pull/9743
154+
x = np.arange(9)
155+
z = np.zeros((9, 9))
156+
157+
fig, ax = plt.subplots()
158+
fmt = {1.: '%1.2f'}
159+
with pytest.warns(UserWarning) as record:
160+
cs = ax.contour(x, x, z, levels=[1.])
161+
ax.clabel(cs, fmt=fmt)
162+
assert len(record) == 1
163+
164+
146165
def test_contour_uniform_z():
147166

148167
x = np.arange(9)

0 commit comments

Comments
 (0)