""" ================ Image nonuniform ================ `.NonUniformImage` is a generalized image with pixels on a rectilinear grid, i.e. it allows rows and columns with individual heights / widths. There is no high-level plotting method on `~.axes.Axes` or `.pyplot` to create a NonUniformImage. Instead, you have to instantiate the image explicitly add it to the Axes using `.Axes.add_image`. """ import matplotlib.pyplot as plt import numpy as np from matplotlib import cm from matplotlib.image import NonUniformImage interp = 'nearest' # Linear x array for cell centers: x = np.linspace(-4, 4, 9) # Highly nonlinear x array: x2 = x**3 y = np.linspace(-4, 4, 9) z = np.sqrt(x[np.newaxis, :]**2 + y[:, np.newaxis]**2) fig, axs = plt.subplots(nrows=2, ncols=2, layout='constrained') fig.suptitle('NonUniformImage class', fontsize='large') ax = axs[0, 0] im = NonUniformImage(ax, interpolation=interp, extent=(-4, 4, -4, 4), cmap=cm.Purples) im.set_data(x, y, z) ax.add_image(im) ax.set_xlim(-4, 4) ax.set_ylim(-4, 4) ax.set_title(interp) ax = axs[0, 1] im = NonUniformImage(ax, interpolation=interp, extent=(-64, 64, -4, 4), cmap=cm.Purples) im.set_data(x2, y, z) ax.add_image(im) ax.set_xlim(-64, 64) ax.set_ylim(-4, 4) ax.set_title(interp) interp = 'bilinear' ax = axs[1, 0] im = NonUniformImage(ax, interpolation=interp, extent=(-4, 4, -4, 4), cmap=cm.Purples) im.set_data(x, y, z) ax.add_image(im) ax.set_xlim(-4, 4) ax.set_ylim(-4, 4) ax.set_title(interp) ax = axs[1, 1] im = NonUniformImage(ax, interpolation=interp, extent=(-64, 64, -4, 4), cmap=cm.Purples) im.set_data(x2, y, z) ax.add_image(im) ax.set_xlim(-64, 64) ax.set_ylim(-4, 4) ax.set_title(interp) plt.show()