Note
Go to the end to download the full example code.
Multiple images with one colorbar#
Use a single colorbar for multiple images.
Currently, a colorbar can only be connected to one image. The connection guarantees that the data coloring is consistent with the colormap scale (i.e. the color of value x in the colormap is used for coloring a data value x in the image).
If we want one colorbar to be representative for multiple images, we have
to explicitly ensure consistent data coloring by using the same
data-to-color pipeline for all the images. We ensure this by explicitly
creating a matplotlib.colorizer.Colorizer object that we pass to all
the image plotting methods.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colorizer as mcolorizer
import matplotlib.colors as mcolors
np.random.seed(19680801)
datasets = [
(i+1)/10 * np.random.rand(10, 20)
for i in range(4)
]
fig, axs = plt.subplots(2, 2)
fig.suptitle('Multiple images')
# create a colorizer with a predefined norm to be shared across all images
norm = mcolors.Normalize(vmin=np.min(datasets), vmax=np.max(datasets))
colorizer = mcolorizer.Colorizer(norm=norm)
images = []
for ax, data in zip(axs.flat, datasets):
images.append(ax.imshow(data, colorizer=colorizer))
fig.colorbar(images[0], ax=axs, orientation='horizontal', fraction=.1)
plt.show()

The colors are now kept consistent across all images when changing the scaling, e.g. through zooming in the colorbar or via the "edit axis, curves and images parameters" GUI of the Qt backend. Additionally, if the colormap of the colorizer is changed, (e.g. through the "edit axis, curves and images parameters" GUI of the Qt backend) this change propagates to the other plots and the colorbar.
References
The use of the following functions, methods, classes and modules is shown in this example: