matplotlib 3.5.1

>>> """
============
Axes Divider
============

Axes divider to calculate location of axes and
create a divider for them using existing axes instances.
"""
... 
... from matplotlib import cbook
... import matplotlib.pyplot as plt
... 
... 
... 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_image(ax):
...  Z, extent = get_demo_image()
... 
...  im = ax.imshow(Z, extent=extent)
...  cb = plt.colorbar(im)
...  cb.ax.yaxis.set_tick_params(labelright=False)
... 
... 
... def demo_locatable_axes_hard(fig):
... 
...  from mpl_toolkits.axes_grid1 import SubplotDivider, Size
...  from mpl_toolkits.axes_grid1.mpl_axes import Axes
... 
...  divider = SubplotDivider(fig, 2, 2, 2, aspect=True)
... 
...  # axes for image
...  ax = fig.add_axes(divider.get_position(), axes_class=Axes)
... 
...  # axes for colorbar
...  # (the label prevents Axes.add_axes from incorrectly believing that the two
...  # axes are the same)
...  ax_cb = fig.add_axes(divider.get_position(), axes_class=Axes, label="cb")
... 
...  h = [Size.AxesX(ax), # main axes
...  Size.Fixed(0.05), # padding, 0.1 inch
...  Size.Fixed(0.2), # colorbar, 0.3 inch
...  ]
... 
...  v = [Size.AxesY(ax)]
... 
...  divider.set_horizontal(h)
...  divider.set_vertical(v)
... 
...  ax.set_axes_locator(divider.new_locator(nx=0, ny=0))
...  ax_cb.set_axes_locator(divider.new_locator(nx=2, ny=0))
... 
...  ax_cb.axis["left"].toggle(all=False)
...  ax_cb.axis["right"].toggle(ticks=True)
... 
...  Z, extent = get_demo_image()
... 
...  im = ax.imshow(Z, extent=extent)
...  plt.colorbar(im, cax=ax_cb)
...  ax_cb.yaxis.set_tick_params(labelright=False)
... 
... 
... def demo_locatable_axes_easy(ax):
...  from mpl_toolkits.axes_grid1 import make_axes_locatable
... 
...  divider = make_axes_locatable(ax)
... 
...  ax_cb = divider.new_horizontal(size="5%", pad=0.05)
...  fig = ax.get_figure()
...  fig.add_axes(ax_cb)
... 
...  Z, extent = get_demo_image()
...  im = ax.imshow(Z, extent=extent)
... 
...  plt.colorbar(im, cax=ax_cb)
...  ax_cb.yaxis.tick_right()
...  ax_cb.yaxis.set_tick_params(labelright=False)
... 
... 
... def demo_images_side_by_side(ax):
...  from mpl_toolkits.axes_grid1 import make_axes_locatable
... 
...  divider = make_axes_locatable(ax)
... 
...  Z, extent = get_demo_image()
...  ax2 = divider.new_horizontal(size="100%", pad=0.05)
...  fig1 = ax.get_figure()
...  fig1.add_axes(ax2)
... 
...  ax.imshow(Z, extent=extent)
...  ax2.imshow(Z, extent=extent)
...  ax2.yaxis.set_tick_params(labelleft=False)
... 
... 
... def demo():
... 
...  fig = plt.figure(figsize=(6, 6))
... 
...  # PLOT 1
...  # simple image & colorbar
...  ax = fig.add_subplot(2, 2, 1)
...  demo_simple_image(ax)
... 
...  # PLOT 2
...  # image and colorbar whose location is adjusted in the drawing time.
...  # a hard way
... 
...  demo_locatable_axes_hard(fig)
... 
...  # PLOT 3
...  # image and colorbar whose location is adjusted in the drawing time.
...  # a easy way
... 
...  ax = fig.add_subplot(2, 2, 3)
...  demo_locatable_axes_easy(ax)
... 
...  # PLOT 4
...  # two images side by side with fixed padding.
... 
...  ax = fig.add_subplot(2, 2, 4)
...  demo_images_side_by_side(ax)
... 
...  plt.show()
... 
... 
... demo()
...