Interaktives Triangulationsdiagramm mit Matplotlib erstellen

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 Lab werden Sie durch die Erstellung eines Triangulationsdiagramms mit Matplotlib geführt. Sie werden lernen, wie ein Triangulation-Objekt erstellt wird, ein TriFinder-Objekt verwendet wird und Interaktivität eingerichtet wird, um das unter dem Cursor liegende Dreieck hervorzuheben.

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 öffnen.

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 bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Triangulation-Objekt erstellen

Zunächst müssen wir ein Triangulation-Objekt erstellen. Wir werden die Klasse Triangulation aus matplotlib.tri verwenden. In diesem Beispiel werden wir ein Triangulation-Objekt mit zufälligen Daten erstellen.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.tri import Triangulation

## Generiere zufällige Daten
x = np.random.rand(10)
y = np.random.rand(10)
triang = Triangulation(x, y)

TriFinder-Objekt erstellen

Um das Dreieck unter dem Cursor zu finden, müssen wir ein TriFinder-Objekt erstellen. Wir können das Standard-TriFinder-Objekt aus dem Triangulation-Objekt mit der Methode get_trifinder() erhalten.

trifinder = triang.get_trifinder()

Diagramm einrichten

Jetzt können wir das Diagramm einrichten. Wir werden plt.subplots() verwenden, um eine Figur und ein Achsenobjekt zu erstellen. Anschließend werden wir ax.triplot() verwenden, um die Triangulation zu zeichnen.

fig, ax = plt.subplots()
ax.triplot(triang)

Dreieck unter Cursor hervorheben

Wir möchten das Dreieck unter dem Cursor hervorheben, wenn die Maus über dem Diagramm bewegt wird. Dazu werden wir ein Polygon-Objekt erstellen, das mit den Eckpunkten des Dreiecks unter dem Cursor aktualisiert wird. Wir werden ax.add_patch() verwenden, um das Polygon zum Diagramm hinzuzufügen.

from matplotlib.patches import Polygon

polygon = Polygon([[0, 0], [0, 0], [0, 0]], facecolor='y')
ax.add_patch(polygon)

Wir werden auch eine Funktion update_polygon() erstellen, die die Eckpunkte des Polygons mit den Eckpunkten des Dreiecks unter dem Cursor aktualisiert.

def update_polygon(tri):
    if tri == -1:
        points = [0, 0, 0]
    else:
        points = triang.triangles[tri]
    xs = triang.x[points]
    ys = triang.y[points]
    polygon.set_xy(np.column_stack([xs, ys]))

Interaktivität einrichten

Wir müssen die Interaktivität einrichten, um das Dreieck unter dem Cursor zu aktualisieren. Wir werden das motion_notify_event verwenden, um zu erkennen, wenn die Maus über dem Diagramm bewegt wird. Wir werden eine Funktion on_mouse_move() erstellen, die das Dreieck unter dem Cursor mithilfe des TriFinder-Objekts erhält, das Polygon mit den Eckpunkten des Dreiecks aktualisiert und den Diagrammtitel mit dem Index des Dreiecks aktualisiert.

def on_mouse_move(event):
    if event.inaxes is None:
        tri = -1
    else:
        tri = trifinder(event.xdata, event.ydata)
    update_polygon(tri)
    ax.set_title(f'Triangle {tri}')
    event.canvas.draw()

fig.canvas.mpl_connect('motion_notify_event', on_mouse_move)

Diagramm anzeigen

Schließlich können wir das Diagramm mit plt.show() anzeigen.

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man ein Diagramm mit einer Triangulation mit Matplotlib erstellt. Wir haben die Klassen Triangulation und TriFinder verwendet, um eine Triangulation zu erstellen und das Dreieck unter dem Cursor zu finden. Wir haben auch die Interaktivität eingerichtet, um das Dreieck unter dem Cursor hervorzuheben.