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()
Multiple images

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:

Gallery generated by Sphinx-Gallery