Einführung in Artists#

Fast alle Objekte, mit denen Sie in einem Matplotlib-Plot interagieren, werden als "Artist" bezeichnet (und sind Unterklassen der Artist-Klasse). Figure und Axes sind Artists und enthalten im Allgemeinen Axis-Artists und Artists, die Daten oder Anmerkungsinformationen enthalten.

Erstellen von Artists#

Normalerweise instanziieren wir Artists nicht direkt, sondern verwenden eine Plotting-Methode für Axes. Einige Beispiele für Plotting-Methoden und die von ihnen erstellten Artist-Objekte sind unten aufgeführt

Hilfsmethode für Axes

Artist

annotate - Textanmerkungen

Annotation

bar - Balkendiagramme

Rectangle

errorbar - Fehlerbalkendiagramme

Line2D und Rectangle

fill - gefüllter Bereich

Polygon

hist - Histogramme

Rectangle

imshow - Bilddaten

AxesImage

legend - Legende für Axes

Legende

plot - XY-Diagramme

Line2D

scatter - Streudiagramme

PolyCollection

text - Text

Text

Als Beispiel können wir den axes.Axes.plot zurückgegebene Line2D Artist speichern.

In [209]: import matplotlib.pyplot as plt
In [210]: import matplotlib.artist as martist
In [211]: import numpy as np

In [212]: fig, ax = plt.subplots()
In [213]: x, y = np.random.rand(2, 100)
In [214]: lines = ax.plot(x, y, '-', label='example')
In [215]: print(lines)
[<matplotlib.lines.Line2D at 0xd378b0c>]

Beachten Sie, dass plot eine _Liste_ von Linien zurückgibt, da Sie mehrere x, y-Paare zum Plotten übergeben können. Die Linie wurde den Axes hinzugefügt, und wir können den Artist über get_lines() abrufen.

In [216]: print(ax.get_lines())
<a list of 1 Line2D objects>
In [217]: print(ax.get_lines()[0])
Line2D(example)

Ändern von Artist-Eigenschaften#

Das Abrufen des lines-Objekts gibt uns Zugriff auf alle Eigenschaften des Line2D-Objekts. Wenn wir also die Linienbreite nachträglich ändern möchten, können wir dies mit Artist.set tun.

fig, ax = plt.subplots(figsize=(4, 2.5))
x = np.arange(0, 13, 0.2)
y = np.sin(x)
lines = ax.plot(x, y, '-', label='example', linewidth=0.2, color='blue')
lines[0].set(color='green', linewidth=2)

(Quellcode, 2x.png, png)

Wir können die vollständige Liste der einstellbaren Eigenschaften mit matplotlib.artist.getp abfragen.

In [218]: martist.getp(lines[0])
agg_filter = None
alpha = None
animated = False
antialiased or aa = True
bbox = Bbox(x0=0.004013842290585101, y0=0.013914221641967...
children = []
clip_box = TransformedBbox(     Bbox(x0=0.0, y0=0.0, x1=1.0, ...
clip_on = True
clip_path = None
color or c = blue
dash_capstyle = butt
dash_joinstyle = round
data = (array([0.91377845, 0.58456834, 0.36492019, 0.0379...
drawstyle or ds = default
figure = Figure(550x450)
fillstyle = full
gapcolor = None
gid = None
in_layout = True
label = example
linestyle or ls = -
linewidth or lw = 2.0
marker = None
markeredgecolor or mec = blue
markeredgewidth or mew = 1.0
markerfacecolor or mfc = blue
markerfacecoloralt or mfcalt = none
markersize or ms = 6.0
markevery = None
mouseover = False
path = Path(array([[0.91377845, 0.51224793],        [0.58...
path_effects = []
picker = None
pickradius = 5
rasterized = False
sketch_params = None
snap = None
solid_capstyle = projecting
solid_joinstyle = round
tightbbox = Bbox(x0=70.4609002763619, y0=54.321277798941786, x...
transform = CompositeGenericTransform(     TransformWrapper(  ...
transformed_clip_path_and_affine = (None, None)
url = None
visible = True
window_extent = Bbox(x0=70.4609002763619, y0=54.321277798941786, x...
xdata = [0.91377845 0.58456834 0.36492019 0.03796664 0.884...
xydata = [[0.91377845 0.51224793]  [0.58456834 0.9820474 ] ...
ydata = [0.51224793 0.9820474  0.24469912 0.61647032 0.483...
zorder = 2

Beachten Sie, dass die meisten Artists auch eine separate Liste von Settern haben; z.B. Line2D.set_color oder Line2D.set_linewidth.

Ändern von Artist-Daten#

Zusätzlich zu Styling-Eigenschaften wie Farbe und Linienbreite hat das Line2D-Objekt eine Daten-Eigenschaft. Sie können die Daten nach der Erstellung der Linie mit Line2D.set_data festlegen. Dies wird oft für Animationen verwendet, bei denen dieselbe Linie über die Zeit verfolgt wird (siehe Animationen mit Matplotlib).

fig, ax = plt.subplots(figsize=(4, 2.5))
x = np.arange(0, 13, 0.2)
y = np.sin(x)
lines = ax.plot(x, y, '-', label='example')
lines[0].set_data([x, np.cos(x)])

(Quellcode, 2x.png, png)

Manuelles Hinzufügen von Artists#

Nicht alle Artists haben Hilfsmethoden, oder Sie möchten aus irgendeinem Grund eine Low-Level-Methode verwenden. Zum Beispiel hat der patches.Circle Artist keine Hilfsmethode, aber wir können ihn dennoch mit der Methode axes.Axes.add_artist erstellen und zu einem Axes hinzufügen.

import matplotlib.patches as mpatches

fig, ax = plt.subplots(figsize=(4, 2.5))
circle = mpatches.Circle((0.5, 0.5), 0.25, ec="none")
ax.add_artist(circle)
clipped_circle = mpatches.Circle((1, 0.5), 0.125, ec="none", facecolor='C1')
ax.add_artist(clipped_circle)
ax.set_aspect(1)

(Quellcode, 2x.png, png)

Der Kreis nimmt den Mittelpunkt und den Radius des Kreises als Argumente für seinen Konstruktor; optionale Argumente werden als Schlüsselwortargumente übergeben.

Beachten Sie, dass, wenn wir einen Artist auf diese Weise manuell hinzufügen, dies nicht unbedingt die Achsengrenzen anpasst, wie es die meisten Hilfsmethoden tun, sodass die Artists abgeschnitten werden können, wie im obigen Fall für das clipped_circle-Patch.

Siehe Referenz für Matplotlib-Artists für weitere Patches.

Entfernen von Artists#

Manchmal möchten wir einen Artist aus einer Figur entfernen, ohne die gesamte Figur von Grund auf neu zu definieren. Die meisten Artists haben eine nutzbare remove-Methode, die den Artist aus der Axes-Liste entfernt. Beispielsweise würde lines[0].remove() den im obigen Beispiel erstellten Line2D-Artist entfernen.