matplotlib 3.5.1

>>> """
==============
Demo Axes Grid
==============

Grid of 2x2 images with single or own colorbar.
"""
... 
... from matplotlib import cbook
... import matplotlib.pyplot as plt
... from mpl_toolkits.axes_grid1 import ImageGrid
... 
... 
... def get_demo_image():
...  z = cbook.get_sample_data("axes_grid/bivariate_normal.npy", np_load=True)
...  # z is a numpy array of 15x15
...  return z, (-3, 4, -4, 3)
... 
... 
... def demo_simple_grid(fig):
...  """ A grid of 2x2 images with 0.05 inch pad between images and only the lower-left axes is labeled. """
...  grid = ImageGrid(fig, 141, # similar to subplot(141)
...  nrows_ncols=(2, 2),
...  axes_pad=0.05,
...  label_mode="1",
...  )
...  Z, extent = get_demo_image()
...  for ax in grid:
...  ax.imshow(Z, extent=extent)
...  # This only affects axes in first column and second row as share_all=False.
...  grid.axes_llc.set_xticks([-2, 0, 2])
...  grid.axes_llc.set_yticks([-2, 0, 2])
... 
... 
... def demo_grid_with_single_cbar(fig):
...  """ A grid of 2x2 images with a single colorbar """
...  grid = ImageGrid(fig, 142, # similar to subplot(142)
...  nrows_ncols=(2, 2),
...  axes_pad=0.0,
...  share_all=True,
...  label_mode="L",
...  cbar_location="top",
...  cbar_mode="single",
...  )
... 
...  Z, extent = get_demo_image()
...  for ax in grid:
...  im = ax.imshow(Z, extent=extent)
...  grid.cbar_axes[0].colorbar(im)
... 
...  for cax in grid.cbar_axes:
...  cax.toggle_label(False)
... 
...  # This affects all axes as share_all = True.
...  grid.axes_llc.set_xticks([-2, 0, 2])
...  grid.axes_llc.set_yticks([-2, 0, 2])
... 
... 
... def demo_grid_with_each_cbar(fig):
...  """ A grid of 2x2 images. Each image has its own colorbar. """
...  grid = ImageGrid(fig, 143, # similar to subplot(143)
...  nrows_ncols=(2, 2),
...  axes_pad=0.1,
...  label_mode="1",
...  share_all=True,
...  cbar_location="top",
...  cbar_mode="each",
...  cbar_size="7%",
...  cbar_pad="2%",
...  )
...  Z, extent = get_demo_image()
...  for ax, cax in zip(grid, grid.cbar_axes):
...  im = ax.imshow(Z, extent=extent)
...  cax.colorbar(im)
...  cax.toggle_label(False)
... 
...  # This affects all axes because we set share_all = True.
...  grid.axes_llc.set_xticks([-2, 0, 2])
...  grid.axes_llc.set_yticks([-2, 0, 2])
... 
... 
... def demo_grid_with_each_cbar_labelled(fig):
...  """ A grid of 2x2 images. Each image has its own colorbar. """
...  grid = ImageGrid(fig, 144, # similar to subplot(144)
...  nrows_ncols=(2, 2),
...  axes_pad=(0.45, 0.15),
...  label_mode="1",
...  share_all=True,
...  cbar_location="right",
...  cbar_mode="each",
...  cbar_size="7%",
...  cbar_pad="2%",
...  )
...  Z, extent = get_demo_image()
... 
...  # Use a different colorbar range every time
...  limits = ((0, 1), (-2, 2), (-1.7, 1.4), (-1.5, 1))
...  for ax, cax, vlim in zip(grid, grid.cbar_axes, limits):
...  im = ax.imshow(Z, extent=extent, vmin=vlim[0], vmax=vlim[1])
...  cb = cax.colorbar(im)
...  cb.set_ticks((vlim[0], vlim[1]))
... 
...  # This affects all axes because we set share_all = True.
...  grid.axes_llc.set_xticks([-2, 0, 2])
...  grid.axes_llc.set_yticks([-2, 0, 2])
... 
... 
... fig = plt.figure(figsize=(10.5, 2.5))
... fig.subplots_adjust(left=0.05, right=0.95)
... 
... demo_simple_grid(fig)
... demo_grid_with_single_cbar(fig)
... demo_grid_with_each_cbar(fig)
... demo_grid_with_each_cbar_labelled(fig)
... 
... plt.show()
...