Matplotlib-Werkzeuge und interaktive Funktionen
Matplotlib-Referenzdokumentation
Diese Funktionsgruppe bietet Ereignisbehandlung, Eigenschaftsoperationen, Mausinteraktion und Debugging-Werkzeuge.
Funktionsübersicht
| Funktion | Beschreibung |
|---|---|
| connect() | Ereignis-Callback-Funktion binden |
| disconnect() | Ereignis-Callback-Funktion entbinden |
| ginput() | Koordinaten per Mausklick abrufen |
| waitforbuttonpress() | Auf Maus- oder Tastendruck warten |
| findobj() | Artist anhand übereinstimmender Bedingungen finden |
| get() / setp() | Artist-Eigenschaften abrufen/setzen |
| getp() | Artist-Eigenschaften abrufen (Alias für get) |
| get_current_fig_manager() | Aktuellen Figure-Manager abrufen |
| new_figure_manager() | Einen Manager für Figure erstellen |
| set_loglevel() | Log-Level festlegen |
| xkcd() | Zum handgezeichneten xkcd-Comicstil wechseln |
Ereignisbehandlung - connect() / disconnect()
matplotlib.pyplot.connect(s, func) matplotlib.pyplot.disconnect(cid)
Beispiel
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(np.random.randn(50).cumsum())
ax.set_title('Klicken Sie irgendwo auf die Abbildung')
# Klickereignis-Callback
def on_click(event):
print(f'Geklickt bei: x={event.xdata:.2f}, y={event.ydata:.2f}')
# Ereignis binden
cid = fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()
print("Beispiel: Klickereignisse registriert")
import numpy as np
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(np.random.randn(50).cumsum())
ax.set_title('Klicken Sie irgendwo auf die Abbildung')
# Klickereignis-Callback
def on_click(event):
print(f'Geklickt bei: x={event.xdata:.2f}, y={event.ydata:.2f}')
# Ereignis binden
cid = fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()
print("Beispiel: Klickereignisse registriert")
ginput() - Mauskoordinaten-Auswahl
matplotlib.pyplot.ginput(n=1, timeout=30, show_clicks=True,
mouse_add=MouseButton.LEFT, mouse_pop=MouseButton.RIGHT,
mouse_stop=MouseButton.MIDDLE)
Beispiel
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(7, 5))
ax.plot(np.arange(10), np.random.randn(10), 'o-')
ax.set_title('3 Punkte anklicken (timeout=15s)')
ax.set_xlim(-1, 10)
ax.set_ylim(-3, 3)
ax.grid(True, alpha=0.3)
print("Bitte klicken Sie 3 Punkte an...")
points = plt.ginput(3, timeout=15, show_clicks=True)
for i, (x, y) in enumerate(points):
print(f"Punkt {i+1}: ({x:.2f}, {y:.2f})")
plt.show()
import numpy as np
fig, ax = plt.subplots(figsize=(7, 5))
ax.plot(np.arange(10), np.random.randn(10), 'o-')
ax.set_title('3 Punkte anklicken (timeout=15s)')
ax.set_xlim(-1, 10)
ax.set_ylim(-3, 3)
ax.grid(True, alpha=0.3)
print("Bitte klicken Sie 3 Punkte an...")
points = plt.ginput(3, timeout=15, show_clicks=True)
for i, (x, y) in enumerate(points):
print(f"Punkt {i+1}: ({x:.2f}, {y:.2f})")
plt.show()
waitforbuttonpress() - Auf Tastendruck warten
matplotlib.pyplot.waitforbuttonpress(timeout=-1)
Rückgabewert: True bedeutet, dass eine Taste gedrückt wurde, False bedeutet, dass eine Maustaste gedrückt wurde.
Beispiel
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10, 100)))
ax.set_title('Beliebige Taste drücken oder mit der Maus klicken')
print("Warte auf Tastendruck...")
result = plt.waitforbuttonpress(timeout=10)
if result is None:
print("Zeitüberschreitung!")
elif result:
print("Taste wurde gedrückt")
else:
print("Maus wurde geklickt")
plt.show()
import numpy as np
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10, 100)))
ax.set_title('Beliebige Taste drücken oder mit der Maus klicken')
print("Warte auf Tastendruck...")
result = plt.waitforbuttonpress(timeout=10)
if result is None:
print("Zeitüberschreitung!")
elif result:
print("Taste wurde gedrückt")
else:
print("Maus wurde geklickt")
plt.show()
findobj() - Artist finden
matplotlib.pyplot.findobj(o=None, match=None, include_self=False)
Beispiel
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.lines import Line2D
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6], label='Linie A')
ax.plot([1, 2, 3], [1, 2, 3], label='Linie B')
ax.set_title('Demo: Objekte finden')
# Alle Line2D-Objekte finden
lines = ax.findobj(match=Line2D)
print(f"{len(lines)} Linienobjekte gefunden")
# Bestimmte Eigenschaften abrufen
for line in lines:
print(f" - Label: {line.get_label()}")
# Verwende get(), um Eigenschaften abzurufen
ax_title = ax.get_title()
print(f"Achsen-Titel: {ax_title}")
plt.show()
import numpy as np
from matplotlib.lines import Line2D
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6], label='Linie A')
ax.plot([1, 2, 3], [1, 2, 3], label='Linie B')
ax.set_title('Demo: Objekte finden')
# Alle Line2D-Objekte finden
lines = ax.findobj(match=Line2D)
print(f"{len(lines)} Linienobjekte gefunden")
# Bestimmte Eigenschaften abrufen
for line in lines:
print(f" - Label: {line.get_label()}")
# Verwende get(), um Eigenschaften abzurufen
ax_title = ax.get_title()
print(f"Achsen-Titel: {ax_title}")
plt.show()
Found 2 line objects - label: Line A - label: Line B Axes title: Find Objects Demo
get() / setp() - Eigenschaftsoperationen
matplotlib.pyplot.get(obj, *args, **kwargs) matplotlib.pyplot.setp(obj, *args, **kwargs) matplotlib.pyplot.getp(obj, *args, **kwargs)
Beispiel
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(layout='constrained')
line, = ax.plot([0, 1], [0, 1], label='test')
# get() ruft eine einzelne Eigenschaft ab
print("Linienfarbe:", plt.get(line, 'color'))
# getp() ruft mehrere Eigenschaften ab
props = plt.getp(line)
print(f"Linie hat {len(props)} Eigenschaften")
# setp() setzt mehrere Eigenschaften auf einmal
plt.setp(line, color='red', linewidth=3, linestyle='--')
ax.set_title('setp() demo')
ax.legend()
plt.show()
print("Beispiel: Eigenschaften über setp() geändert")
import numpy as np
fig, ax = plt.subplots(layout='constrained')
line, = ax.plot([0, 1], [0, 1], label='test')
# get() ruft eine einzelne Eigenschaft ab
print("Linienfarbe:", plt.get(line, 'color'))
# getp() ruft mehrere Eigenschaften ab
props = plt.getp(line)
print(f"Linie hat {len(props)} Eigenschaften")
# setp() setzt mehrere Eigenschaften auf einmal
plt.setp(line, color='red', linewidth=3, linestyle='--')
ax.set_title('setp() demo')
ax.legend()
plt.show()
print("Beispiel: Eigenschaften über setp() geändert")
xkcd() - Handgezeichneter Comic-Stil
matplotlib.pyplot.xkcd(scale=1, length=100, randomness=2)
Beispiel
import matplotlib.pyplot as plt
import numpy as np
# Handgezeichneten xkcd-Stil aktivieren
with plt.xkcd():
fig, ax = plt.subplots(figsize=(8, 5))
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.set_title('XKCD-Stil-Diagramm')
ax.set_xlabel('Zeit')
ax.set_ylabel('Amplitude')
ax.legend()
ax.annotate('Das ist der Höhepunkt!',
xy=(np.pi/2, 1), xytext=(2, 1.3),
arrowprops=dict(arrowstyle='->'))
plt.show()
print("Beispiel: xkcd-Stil angezeigt")
import numpy as np
# Handgezeichneten xkcd-Stil aktivieren
with plt.xkcd():
fig, ax = plt.subplots(figsize=(8, 5))
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.set_title('XKCD-Stil-Diagramm')
ax.set_xlabel('Zeit')
ax.set_ylabel('Amplitude')
ax.legend()
ax.annotate('Das ist der Höhepunkt!',
xy=(np.pi/2, 1), xytext=(2, 1.3),
arrowprops=dict(arrowstyle='->'))
plt.show()
print("Beispiel: xkcd-Stil angezeigt")
set_loglevel() - Log-Level
matplotlib.pyplot.set_loglevel(level)
Level-Optionen: 'debug', 'info', 'warning', 'error', 'critical'.
Beispiel
import matplotlib.pyplot as plt
import numpy as np
# Log-Level auf info setzen (Matplotlib-interne Informationen anzeigen)
plt.set_loglevel('info')
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Debuggen mit loglevel')
plt.show()
import numpy as np
# Log-Level auf info setzen (Matplotlib-interne Informationen anzeigen)
plt.set_loglevel('info')
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Debuggen mit loglevel')
plt.show()
Andere Erweiterungen