1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| 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')
im = ax.imshow(z, cmap=cmap) im.remove() fig.colorbar(im)
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)
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) z2 = np.cos(x**2 + y**2)
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()
|