diff --git a/lib/matplotlib/contour.py b/lib/matplotlib/contour.py index 66a354964144..168b751013b4 100644 --- a/lib/matplotlib/contour.py +++ b/lib/matplotlib/contour.py @@ -1493,9 +1493,26 @@ def _contour_args(self, args, kwargs): else: raise TypeError("Too many arguments to %s; see help(%s)" % (fn, fn)) + + # Check for vmin and vmax values and max out z values accordingly + # want zmax and zmin to be able to be outside data range, according to input vmin/vmax + if 'vmax' in kwargs: + vmax = kwargs['vmax'] + ind = z > vmax + z[ind] = vmax + self.zmax = kwargs['vmax'] + else: + self.zmax = ma.maximum(z) + if 'vmin' in kwargs: + vmin = kwargs['vmin'] + ind = z < vmin + z[ind] = vmin + self.zmin = kwargs['vmin'] + else: + self.zmin = ma.minimum(z) + z = ma.masked_invalid(z, copy=False) - self.zmax = ma.maximum(z) - self.zmin = ma.minimum(z) + if self.logscale and self.zmin <= 0: z = ma.masked_where(z <= 0, z) warnings.warn('Log scale: values of z <= 0 have been masked') diff --git a/lib/matplotlib/tests/baseline_images/test_contour/contour_vmax_over_colorbar_range.png b/lib/matplotlib/tests/baseline_images/test_contour/contour_vmax_over_colorbar_range.png new file mode 100644 index 000000000000..09ddfe1f6fb9 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_contour/contour_vmax_over_colorbar_range.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_contour/contour_vmax_under_colorbar_range.png b/lib/matplotlib/tests/baseline_images/test_contour/contour_vmax_under_colorbar_range.png new file mode 100644 index 000000000000..a36043f609db Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_contour/contour_vmax_under_colorbar_range.png differ diff --git a/lib/matplotlib/tests/test_contour.py b/lib/matplotlib/tests/test_contour.py index 120b4843e436..ebbad2e8e9b0 100644 --- a/lib/matplotlib/tests/test_contour.py +++ b/lib/matplotlib/tests/test_contour.py @@ -177,6 +177,30 @@ def test_given_colors_levels_and_extends(): plt.colorbar() +@image_comparison(baseline_images=['contour_vmax_over_colorbar_range'], + extensions=['png']) +def test_vmax_over_colorbar_range(): + xvec = np.linspace(0, 10) + yvec = np.linspace(0, 20) + X, Y = np.meshgrid(xvec, yvec) + Z = X**2 + Y**2 + + plt.contourf(X, Y, Z, cmap='pink_r', vmax=700) + plt.colorbar() + + +@image_comparison(baseline_images=['contour_vmax_under_colorbar_range'], + extensions=['png']) +def test_vmax_under_colorbar_range(): + xvec = np.linspace(0, 10) + yvec = np.linspace(0, 20) + X, Y = np.meshgrid(xvec, yvec) + Z = X**2 + Y**2 + + plt.contourf(X, Y, Z, cmap='pink_r', vmax=300) + plt.colorbar() + + if __name__ == '__main__': import nose nose.runmodule(argv=['-s', '--with-doctest'], exit=False)