matplotlib 3.5.1

>>> """
===========
Hillshading
===========

Demonstrates a few common tricks with shaded plots.
"""
... import numpy as np
... import matplotlib.pyplot as plt
... from matplotlib.colors import LightSource, Normalize
... 
... 
... def display_colorbar():
...  """Display a correct numeric colorbar for a shaded plot."""
...  y, x = np.mgrid[-4:2:200j, -4:2:200j]
...  z = 10 * np.cos(x**2 + y**2)
... 
...  cmap = plt.cm.copper
...  ls = LightSource(315, 45)
...  rgb = ls.shade(z, cmap)
... 
...  fig, ax = plt.subplots()
...  ax.imshow(rgb, interpolation='bilinear')
... 
...  # Use a proxy artist for the colorbar...
...  im = ax.imshow(z, cmap=cmap)
...  im.remove()
...  fig.colorbar(im, ax=ax)
... 
...  ax.set_title('Using a colorbar with a shaded plot', size='x-large')
... 
... 
... def avoid_outliers():
...  """Use a custom norm to control the displayed z-range of a shaded plot."""
...  y, x = np.mgrid[-4:2:200j, -4:2:200j]
...  z = 10 * np.cos(x**2 + y**2)
... 
...  # Add some outliers...
...  z[100, 105] = 2000
...  z[120, 110] = -9000
... 
...  ls = LightSource(315, 45)
...  fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4.5))
... 
...  rgb = ls.shade(z, plt.cm.copper)
...  ax1.imshow(rgb, interpolation='bilinear')
...  ax1.set_title('Full range of data')
... 
...  rgb = ls.shade(z, plt.cm.copper, vmin=-10, vmax=10)
...  ax2.imshow(rgb, interpolation='bilinear')
...  ax2.set_title('Manually set range')
... 
...  fig.suptitle('Avoiding Outliers in Shaded Plots', size='x-large')
... 
... 
... def shade_other_data():
...  """Demonstrates displaying different variables through shade and color."""
...  y, x = np.mgrid[-4:2:200j, -4:2:200j]
...  z1 = np.sin(x**2) # Data to hillshade
...  z2 = np.cos(x**2 + y**2) # Data to color
... 
...  norm = Normalize(z2.min(), z2.max())
...  cmap = plt.cm.RdBu
... 
...  ls = LightSource(315, 45)
...  rgb = ls.shade_rgb(cmap(norm(z2)), z1)
... 
...  fig, ax = plt.subplots()
...  ax.imshow(rgb, interpolation='bilinear')
...  ax.set_title('Shade by one variable, color by another', size='x-large')
... 
... display_colorbar()
... avoid_outliers()
... shade_other_data()
... plt.show()
...