Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 60d3d29

Browse filesBrowse files
authored
Merge pull request #23684 from oscargus/colorbarhatchrectangle
Fix rectangle and hatches for colorbar
2 parents 76a5711 + 9576ab3 commit 60d3d29
Copy full SHA for 60d3d29

File tree

3 files changed

+42
-5
lines changed
Filter options

3 files changed

+42
-5
lines changed

‎lib/matplotlib/colorbar.py

Copy file name to clipboardExpand all lines: lib/matplotlib/colorbar.py
+12-5Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -606,10 +606,13 @@ def _update_dividers(self):
606606
self.dividers.set_segments(segments)
607607

608608
def _add_solids_patches(self, X, Y, C, mappable):
609-
hatches = mappable.hatches * len(C) # Have enough hatches.
609+
hatches = mappable.hatches * (len(C) + 1) # Have enough hatches.
610+
if self._extend_lower():
611+
# remove first hatch that goes into the extend patch
612+
hatches = hatches[1:]
610613
patches = []
611614
for i in range(len(X) - 1):
612-
xy = np.array([[X[i, 0], Y[i, 0]],
615+
xy = np.array([[X[i, 0], Y[i, 1]],
613616
[X[i, 1], Y[i, 0]],
614617
[X[i + 1, 1], Y[i + 1, 0]],
615618
[X[i + 1, 0], Y[i + 1, 1]]])
@@ -661,9 +664,9 @@ def _do_extends(self, ax=None):
661664
mappable = getattr(self, 'mappable', None)
662665
if (isinstance(mappable, contour.ContourSet)
663666
and any(hatch is not None for hatch in mappable.hatches)):
664-
hatches = mappable.hatches
667+
hatches = mappable.hatches * (len(self._y) + 1)
665668
else:
666-
hatches = [None]
669+
hatches = [None] * (len(self._y) + 1)
667670

668671
if self._extend_lower():
669672
if not self.extendrect:
@@ -687,6 +690,8 @@ def _do_extends(self, ax=None):
687690
zorder=np.nextafter(self.ax.patch.zorder, -np.inf))
688691
self.ax.add_patch(patch)
689692
self._extend_patches.append(patch)
693+
# remove first hatch that goes into the extend patch
694+
hatches = hatches[1:]
690695
if self._extend_upper():
691696
if not self.extendrect:
692697
# triangle
@@ -699,10 +704,12 @@ def _do_extends(self, ax=None):
699704
# add the patch
700705
val = 0 if self._long_axis().get_inverted() else -1
701706
color = self.cmap(self.norm(self._values[val]))
707+
hatch_idx = len(self._y) - 1
702708
patch = mpatches.PathPatch(
703709
mpath.Path(xy), facecolor=color, alpha=self.alpha,
704710
linewidth=0, antialiased=False,
705-
transform=self.ax.transAxes, hatch=hatches[-1], clip_on=False,
711+
transform=self.ax.transAxes, hatch=hatches[hatch_idx],
712+
clip_on=False,
706713
# Place it right behind the standard patches, which is
707714
# needed if we updated the extends
708715
zorder=np.nextafter(self.ax.patch.zorder, -np.inf))
Loading

‎lib/matplotlib/tests/test_colorbar.py

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_colorbar.py
+30Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -998,6 +998,36 @@ def test_colorbar_extend_drawedges():
998998
np.testing.assert_array_equal(cbar.dividers.get_segments(), res)
999999

10001000

1001+
@image_comparison(['contourf_extend_patches.png'], remove_text=True,
1002+
style='mpl20')
1003+
def test_colorbar_contourf_extend_patches():
1004+
params = [
1005+
('both', 5, ['\\', '//']),
1006+
('min', 7, ['+']),
1007+
('max', 2, ['|', '-', '/', '\\', '//']),
1008+
('neither', 10, ['//', '\\', '||']),
1009+
]
1010+
1011+
plt.rcParams['axes.linewidth'] = 2
1012+
1013+
fig = plt.figure(figsize=(10, 4))
1014+
subfigs = fig.subfigures(1, 2)
1015+
fig.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95)
1016+
1017+
x = np.linspace(-2, 3, 50)
1018+
y = np.linspace(-2, 3, 30)
1019+
z = np.cos(x[np.newaxis, :]) + np.sin(y[:, np.newaxis])
1020+
1021+
cmap = mpl.colormaps["viridis"]
1022+
for orientation, subfig in zip(['horizontal', 'vertical'], subfigs):
1023+
axs = subfig.subplots(2, 2).ravel()
1024+
for ax, (extend, levels, hatches) in zip(axs, params):
1025+
cs = ax.contourf(x, y, z, levels, hatches=hatches,
1026+
cmap=cmap, extend=extend)
1027+
subfig.colorbar(cs, ax=ax, orientation=orientation, fraction=0.4,
1028+
extendfrac=0.2, aspect=5)
1029+
1030+
10011031
def test_negative_boundarynorm():
10021032
fig, ax = plt.subplots(figsize=(1, 3))
10031033
cmap = mpl.colormaps["viridis"]

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.