diff --git a/lib/matplotlib/colorbar.py b/lib/matplotlib/colorbar.py index 1ff10c9e3c96..3dcb1ffe14c4 100644 --- a/lib/matplotlib/colorbar.py +++ b/lib/matplotlib/colorbar.py @@ -1240,8 +1240,18 @@ def _proportional_y(self): if (isinstance(self.norm, colors.BoundaryNorm) or self.boundaries is not None): y = (self._boundaries - self._boundaries[self._inside][0]) - y = y / (self._boundaries[self._inside][-1] - - self._boundaries[self._inside][0]) + + # original + # y = y / (self._boundaries[self._inside][-1] - + # self._boundaries[self._inside][0]) + + # change + if (self._boundaries[self._inside][-1] + != self._boundaries[self._inside][0]): + y = y / (self._boundaries[self._inside][-1] - + self._boundaries[self._inside][0]) + + # need yscaled the same as the axes scale to get # the extend lengths. if self.spacing == 'uniform': @@ -1262,10 +1272,15 @@ def _proportional_y(self): yscaled = np.ma.filled(norm(yscaled), np.nan) # make the lower and upper extend lengths proportional to the lengths # of the first and last boundary spacing (if extendfrac='auto'): - automin = yscaled[1] - yscaled[0] - automax = yscaled[-1] - yscaled[-2] + extendlength = [0, 0] if self._extend_lower() or self._extend_upper(): + # change + automin = yscaled[0] + automax = yscaled[0] + if len(yscaled) > 1: + automin = yscaled[1] - yscaled[0] + automax = yscaled[-1] - yscaled[-2] extendlength = self._get_extension_lengths( self.extendfrac, automin, automax, default=0.05) return y, extendlength diff --git a/lib/matplotlib/tests/test_colorbar.py b/lib/matplotlib/tests/test_colorbar.py index 5ab3ccf13f80..03eb04131930 100644 --- a/lib/matplotlib/tests/test_colorbar.py +++ b/lib/matplotlib/tests/test_colorbar.py @@ -244,6 +244,18 @@ def test_contour_colorbar(): fig.colorbar(CS, orientation='vertical') +def test_contour_uniformfield_colorbar(): + # Smoke test for issue + fig, ax = plt.subplots() + with pytest.warns(Warning) as record: + cs = ax.contour([[2, 2], [2, 2]]) + assert len(record) == 1 + try: + fig.colorbar(cs, ax=ax) + except: + pass + + @image_comparison(['cbar_with_subplots_adjust.png'], remove_text=True, savefig_kwarg={'dpi': 40}) def test_gridspec_make_colorbar():