Matplotlib ImageGrid Demos für geteilte Achsen

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial wird gezeigt, wie man mit Matplotlib's ImageGrid ein Bildgitter mit geteilten x- und y-Achsen erstellt. Es werden zwei Demos behandelt:

  • Im Demo 1 wird gezeigt, wie an jeder Achse eine Farbskala hinzugefügt wird.
  • Im Demo 2 wird gezeigt, wie eine geteilte Farbskala hinzugefügt wird.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

Wir werden Matplotlib's ImageGrid verwenden, um das Bildgitter zu erstellen. Wir werden auch numpy verwenden, um Beispielsdaten zu generieren, und cbook, um auf einen Beispielsdatensatz zuzugreifen.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cbook
from mpl_toolkits.axes_grid1 import ImageGrid

Definieren einer Funktion zum Hinzufügen von inneren Titeln zu den Achsen

Die Funktion add_inner_title wird verwendet, um Titeln zu den Bildern hinzuzufügen.

def add_inner_title(ax, title, loc, **kwargs):
    from matplotlib.offsetbox import AnchoredText
    from matplotlib.patheffects import withStroke
    prop = dict(path_effects=[withStroke(foreground='w', linewidth=3)],
                size=plt.rcParams['legend.fontsize'])
    at = AnchoredText(title, loc=loc, prop=prop,
                      pad=0., borderpad=0.5,
                      frameon=False, **kwargs)
    ax.add_artist(at)
    return at

Vorbereiten der Beispielsdaten

Wir werden die Funktion get_sample_data aus cbook verwenden, um Beispielsdaten zu erhalten. Anschließend werden wir die Bilder vorbereiten, die im Gitter angezeigt werden sollen.

Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")
extent = (-3, 4, -4, 3)
ZS = [Z[i::3, :] for i in range(3)]
extent = extent[0], extent[1]/3., extent[2], extent[3]

Demo 1 - Farbskala an jeder Achse

Wir werden mit dem folgenden Code ein Gitter von 3 Bildern mit einer Farbskala an jeder Achse erstellen:

grid = ImageGrid(
    fig, 211, nrows_ncols=(1, 3), axes_pad=0.05, label_mode="1", share_all=True,
    cbar_location="top", cbar_mode="each", cbar_size="7%", cbar_pad="1%")
grid[0].set(xticks=[-2, 0], yticks=[-2, 0, 2])

for i, (ax, z) in enumerate(zip(grid, ZS)):
    im = ax.imshow(z, origin="lower", extent=extent)
    cb = ax.cax.colorbar(im)
    ## Ändern der Farbskala-Ticks
    if i in [1, 2]:
        cb.set_ticks([-1, 0, 1])

for ax, im_title in zip(grid, ["Bild 1", "Bild 2", "Bild 3"]):
    add_inner_title(ax, im_title, loc='lower left')
  • Wir erstellen ein Gitter von 3 Bildern mit ImageGrid.
  • Wir setzen den cbar_mode auf "each", um an jeder Achse eine Farbskala hinzuzufügen.
  • Wir setzen den Parameter share_all auf True, um die x- und y-Achsen über alle Bilder hinweg zu teilen.
  • Wir setzen den Parameter cbar_location auf "top", um die Farbskalen oben zu positionieren.
  • Wir setzen die xticks und yticks für das erste Bild.
  • Wir durchlaufen jedes Bild und fügen das Bild zur Achse hinzu, indem wir imshow verwenden.
  • Wir fügen jeder Achse eine Farbskala hinzu, indem wir ax.cax.colorbar verwenden.
  • Wir setzen die Farbskala-Ticks für das zweite und dritte Bild.
  • Wir fügen jedem Bild einen Titel hinzu, indem wir add_inner_title verwenden.

Demo 2 - Geteilte Farbskala

Wir werden mit dem folgenden Code ein Gitter von 3 Bildern mit einer geteilten Farbskala erstellen:

grid2 = ImageGrid(
    fig, 212, nrows_ncols=(1, 3), axes_pad=0.05, label_mode="1", share_all=True,
    cbar_location="right", cbar_mode="single", cbar_size="10%", cbar_pad=0.05)
grid2[0].set(xlabel="X", ylabel="Y", xticks=[-2, 0], yticks=[-2, 0, 2])

clim = (np.min(ZS), np.max(ZS))
for ax, z in zip(grid2, ZS):
    im = ax.imshow(z, clim=clim, origin="lower", extent=extent)

## Mit cbar_mode="single" sind die cax-Attribute aller Achsen identisch.
ax.cax.colorbar(im)

for ax, im_title in zip(grid2, ["(a)", "(b)", "(c)"]):
    add_inner_title(ax, im_title, loc='upper left')
  • Wir erstellen ein Gitter von 3 Bildern mit ImageGrid.
  • Wir setzen den cbar_mode auf "single", um eine geteilte Farbskala hinzuzufügen.
  • Wir setzen den Parameter share_all auf True, um die x- und y-Achsen über alle Bilder hinweg zu teilen.
  • Wir setzen den Parameter cbar_location auf "right", um die Farbskala rechts zu positionieren.
  • Wir setzen die xticks und yticks für das erste Bild.
  • Wir durchlaufen jedes Bild und fügen das Bild zur Achse hinzu, indem wir imshow verwenden.
  • Wir setzen den Parameter clim, um sicherzustellen, dass alle Bilder die gleiche Farbskala verwenden.
  • Wir fügen einer geteilten Farbskala zur Achse hinzu, indem wir ax.cax.colorbar verwenden.
  • Wir fügen jedem Bild einen Titel hinzu, indem wir add_inner_title verwenden.

Zeige das Diagramm an

Wir werden plt.show() verwenden, um das Diagramm anzuzeigen.

plt.show()

Zusammenfassung

In diesem Tutorial wurde gezeigt, wie man mit Matplotlib's ImageGrid ein Gitter von Bildern mit geteilten x- und y-Achsen erstellt. Wir haben zwei Demos behandelt: Im Demo 1 wurde gezeigt, wie man an jeder Achse eine Farbskala hinzufügt, und im Demo 2 wurde gezeigt, wie man eine geteilte Farbskala hinzufügt.