matplotlib 3.5.1

>>> """
============================
Affine transform of an image
============================


Prepending an affine transformation (`~.transforms.Affine2D`) to the :ref:`data
transform <data-coords>` of an image allows to manipulate the image's shape and
orientation.  This is an example of the concept of :ref:`transform chaining
<transformation-pipeline>`.

The image of the output should have its boundary match the dashed yellow
rectangle.
"""
... 
... import numpy as np
... import matplotlib.pyplot as plt
... import matplotlib.transforms as mtransforms
... 
... 
... def get_image():
...  delta = 0.25
...  x = y = np.arange(-3.0, 3.0, delta)
...  X, Y = np.meshgrid(x, y)
...  Z1 = np.exp(-X**2 - Y**2)
...  Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
...  Z = (Z1 - Z2)
...  return Z
... 
... 
... def do_plot(ax, Z, transform):
...  im = ax.imshow(Z, interpolation='none',
...  origin='lower',
...  extent=[-2, 4, -3, 2], clip_on=True)
... 
...  trans_data = transform + ax.transData
...  im.set_transform(trans_data)
... 
...  # display intended extent of the image
...  x1, x2, y1, y2 = im.get_extent()
...  ax.plot([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], "y--",
...  transform=trans_data)
...  ax.set_xlim(-5, 5)
...  ax.set_ylim(-4, 4)
... 
... 
... # prepare image and figure
... fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
... Z = get_image()
... 
... # image rotation
... do_plot(ax1, Z, mtransforms.Affine2D().rotate_deg(30))
... 
... # image skew
... do_plot(ax2, Z, mtransforms.Affine2D().skew_deg(30, 15))
... 
... # scale and reflection
... do_plot(ax3, Z, mtransforms.Affine2D().scale(-1, .5))
... 
... # everything and a translation
... do_plot(ax4, Z, mtransforms.Affine2D().
...  rotate_deg(30).skew_deg(30, 15).scale(-1, .5).translate(.5, -1))
... 
... plt.show()
... 
... 
... #############################################################################
... #
... # .. admonition:: References
... #
... # The use of the following functions, methods, classes and modules is shown
... # in this example:
... #
... # - `matplotlib.axes.Axes.imshow` / `matplotlib.pyplot.imshow`
... # - `matplotlib.transforms.Affine2D`
...