Matplotlib Inset Locator

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

Matplotlib ist eine Datenvisualisierungsbibliothek in Python. Die .inset_locator-Funktion ermöglicht es, Einfügesubplots in den Ecken der Achsen einfach zu platzieren. In diesem Lab werden wir untersuchen, wie die .inset_locator-Funktion verwendet werden kann, um Einfügesubplots in Matplotlib-Graphen zu erstellen.

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 von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Erstellen eines Diagramms mit zwei Unterdiagrammen

Zunächst müssen wir ein Diagramm mit zwei Unterdiagrammen erstellen. Wir werden die plt.subplots()-Methode verwenden, um ein Diagramm mit zwei nebeneinander liegenden Unterdiagrammen zu erstellen.

import matplotlib.pyplot as plt

fig, (ax, ax2) = plt.subplots(1, 2, figsize=[5.5, 2.8])

Erstellen von Einfügebereichen

Als nächstes werden wir in jedem der Unterdiagramme Einfügebereiche erstellen. Wir werden die inset_axes()-Methode verwenden, um die Einfügebereiche zu erstellen. Wir werden vier Einfügebereiche mit unterschiedlichen Größen und Positionen erstellen.

from mpl_toolkits.axes_grid1.inset_locator import inset_axes

## Erstellen Sie einen Einfügebereich mit einer Breite von 1,3 Zoll und einer Höhe von 0,9 Zoll
## an der standardmäßigen oberen rechten Position
axins = inset_axes(ax, width=1.3, height=0.9)

## Erstellen Sie einen Einfügebereich mit einer Breite von 30% und einer Höhe von 40% der Begrenzung des übergeordneten Diagramms
## in der unteren linken Ecke (loc=3)
axins2 = inset_axes(ax, width="30%", height="40%", loc=3)

## Erstellen Sie einen Einfügebereich mit gemischten Spezifikationen im zweiten Unterdiagramm;
## Die Breite beträgt 30% der Begrenzung des übergeordneten Diagramms und
## Die Höhe beträgt 1 Zoll in der oberen linken Ecke (loc=2)
axins3 = inset_axes(ax2, width="30%", height=1., loc=2)

## Erstellen Sie einen Einfügebereich in der unteren rechten Ecke (loc=4) mit borderpad=1, d.h.
## 10 Punkte Abstand (da 10pt die standardmäßige Schriftgröße ist) zum übergeordneten Diagramm
axins4 = inset_axes(ax2, width="20%", height="20%", loc=4, borderpad=1)

Entfernen von Skalenmarkierungen

Um die Skalenmarkierungen von jedem der Einfügebereiche zu entfernen, können wir die tick_params()-Methode verwenden und labelleft und labelbottom auf False setzen.

## Entfernen Sie die Skalenmarkierungen der Einfügebereiche
for axi in [axins, axins2, axins3, axins4]:
    axi.tick_params(labelleft=False, labelbottom=False)

Steuern der Position und Größe von Einfügebereichen

Wir können die Parameter bbox_to_anchor und bbox_transform verwenden, um die Position und Größe des Einfügebereichs zu steuern. Diese Parameter ermöglichen eine feingranulare Steuerung über die Position und Größe des Einfügebereichs oder sogar die Positionierung des Einfügebereichs an völlig willkürlichen Positionen.

## Wir verwenden die Achsen-Transformation als bbox_transform. Daher muss die Begrenzungsbox
## in Achsenkoordinaten angegeben werden ((0, 0) ist die untere linke Ecke
## der Achse, (1, 1) ist die obere rechte Ecke).
## Die Begrenzungsbox (.2,.4,.6,.5) beginnt bei (.2,.4) und reicht bis (.8,.9)
## in diesen Koordinaten.
## Innerhalb dieser Begrenzungsbox wird ein Einfügebereich mit der Hälfte der Breite der Begrenzungsbox und
## drei Viertel der Höhe der Begrenzungsbox erstellt. Die untere linke Ecke
## des Einfügebereichs wird mit der unteren linken Ecke der Begrenzungsbox ausgerichtet (loc=3).
## Der Einfügebereich wird dann um die standardmäßige 0,5 Einheiten der Schriftgröße versetzt.
axins = inset_axes(ax, width="50%", height="75%",
                   bbox_to_anchor=(.2,.4,.6,.5),
                   bbox_transform=ax.transAxes, loc=3)

Erstellen von Einfügebereichen mit beliebigen Positionen

Wir können Einfügebereiche mit beliebigen Positionen erstellen, indem wir den Parameter bbox_to_anchor verwenden, um eine Begrenzungsbox in Datenkoordinaten anzugeben, und den Parameter bbox_transform verwenden, um die Transformation für die Begrenzungsbox anzugeben.

## Erstellen Sie einen Einfügebereich in Datenkoordinaten, indem Sie ax.transData als Transformation verwenden
axins3 = inset_axes(ax2, width="100%", height="100%",
                    bbox_to_anchor=(1e-2, 2, 1e3, 3),
                    bbox_transform=ax2.transData, loc=2, borderpad=0)

Erstellen eines Einfügebereichs außerhalb der Achse

Wir können einen Einfügebereich außerhalb der Achse erstellen, indem wir den Parameter bbox_to_anchor verwenden, um eine Begrenzungsbox in Achsenkoordinaten anzugeben, die außerhalb der Achse hinausreicht.

## Erstellen Sie einen Einfügebereich außerhalb der Achse
axins = inset_axes(ax, width="100%", height="100%",
                   bbox_to_anchor=(1.05,.6,.5,.4),
                   bbox_transform=ax.transAxes, loc=2, borderpad=0)

Erstellen eines Einfügebereichs mit einer Begrenzungsbox als 2-Tupel

Wir können einen Einfügebereich mit einer Begrenzungsbox als 2-Tupel erstellen, indem wir die Breite und Höhe in Zoll angeben und den Parameter bbox_to_anchor verwenden, um die untere linke Ecke des Einfügebereichs anzugeben.

## Erstellen Sie einen Einfügebereich mit einer Begrenzungsbox als 2-Tupel. Beachten Sie, dass dies eine
## Begrenzungsbox ohne Ausdehnung erstellt. Dies hat daher nur Sinn, wenn
## Breite und Höhe in absoluten Einheiten (Zoll) angegeben werden.
axins2 = inset_axes(ax, width=0.5, height=0.4,
                    bbox_to_anchor=(0.33, 0.25),
                    bbox_transform=ax.transAxes, loc=3, borderpad=0)

Erstellen eines Einfügebereichs, das in den Koordinaten der Figur zentriert ist

Wir können einen Einfügebereich erstellen, der in den Koordinaten der Figur horizontal zentriert ist und vertikal so ausgerichtet ist, dass er mit den Achsen übereinstimmt, indem wir die Methode blended_transform_factory() verwenden, um eine gemischte Transformation zu erstellen und diese als Parameter bbox_transform zu verwenden.

## Erstellen Sie einen Einfügebereich, der in den Koordinaten der Figur horizontal zentriert ist und vertikal
## so ausgerichtet ist, dass er mit den Achsen übereinstimmt.
from matplotlib.transforms import blended_transform_factory

transform = blended_transform_factory(fig.transFigure, ax2.transAxes)
axins4 = inset_axes(ax2, width="16%", height="34%",
                    bbox_to_anchor=(0, 0, 1, 1),
                    bbox_transform=transform, loc=8, borderpad=0)

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die .inset_locator-Funktion in Matplotlib verwendet, um Einfügebereiche in Graphen zu erstellen. Wir haben Einfügebereiche mit unterschiedlichen Größen und Positionen erstellt, die Position und Größe der Einfügebereiche kontrolliert und Einfügebereiche mit beliebigen Positionen erstellt. Wir haben auch Einfügebereiche außerhalb der Achsen, Einfügebereiche mit 2-Tupel-Begrenzungsboxen und Einfügebereiche, die in den Koordinaten der Figur zentriert sind, erstellt.