Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Leitfaden für Pfadeffekte #
Definieren von Pfaden, denen Objekte auf einer Leinwand folgen.
Das Modul von Matplotlib patheffects
bietet Funktionen zum Anwenden einer Mehrfachzeichnungsstufe auf jeden Künstler, der über eine path.Path
.
Zu den Künstlern, auf die ein Pfadeffekt angewendet werden kann, gehören , patches.Patch
und
sogar . Die Pfadeffekte jedes Künstlers können über die Methode gesteuert werden, die eine Iteration von Instanzen annimmt.lines.Line2D
collections.Collection
text.Text
Artist.set_path_effects
AbstractPathEffect
Der einfachste Pfadeffekt ist der Normal
Effekt, der den Künstler einfach ohne Effekt zeichnet:
import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects
fig = plt.figure(figsize=(5, 1.5))
text = fig.text(0.5, 0.5, 'Hello path effects world!\nThis is the normal '
'path effect.\nPretty dull, huh?',
ha='center', va='center', size=20)
text.set_path_effects([path_effects.Normal()])
plt.show()
Während die Handlung nicht anders aussieht, als man es ohne Pfadeffekte erwarten würde, wurde die Zeichnung des Textes jetzt geändert, um das Pfadeffekt-Framework zu verwenden, was die Möglichkeiten für interessantere Beispiele eröffnet.
Schatten hinzufügen #
Ein weitaus interessanterer Pfadeffekt als Normal
der Schlagschatten, den wir auf jeden unserer pfadbasierten Künstler anwenden können. Die Klassen SimplePatchShadow
und SimpleLineShadow
tun genau dies, indem sie entweder einen gefüllten Fleck oder einen Linienfleck unter dem ursprünglichen Künstler zeichnen:
import matplotlib.patheffects as path_effects
text = plt.text(0.5, 0.5, 'Hello path effects world!',
path_effects=[path_effects.withSimplePatchShadow()])
plt.plot([0, 3, 2, 5], linewidth=5, color='blue',
path_effects=[path_effects.SimpleLineShadow(),
path_effects.Normal()])
plt.show()
Beachten Sie die beiden Ansätze zum Einstellen der Pfadeffekte in diesem Beispiel. Der erste verwendet die with*
Klassen, um die gewünschte Funktionalität automatisch gefolgt von dem "normalen" Effekt einzuschließen, während der letztere explizit die zwei zu zeichnenden Pfadeffekte definiert.
Einen Künstler hervorheben #
Eine schöne Möglichkeit, Künstler visuell hervorzuheben, besteht darin, einen Umriss in einer kräftigen Farbe unter dem eigentlichen Künstler zu zeichnen. Der Stroke
Pfadeffekt macht dies zu einer relativ einfachen Aufgabe:
fig = plt.figure(figsize=(7, 1))
text = fig.text(0.5, 0.5, 'This text stands out because of\n'
'its black border.', color='white',
ha='center', va='center', size=30)
text.set_path_effects([path_effects.Stroke(linewidth=3, foreground='black'),
path_effects.Normal()])
plt.show()
Es ist wichtig zu beachten, dass dieser Effekt nur funktioniert, weil wir den Textpfad zweimal gezeichnet haben; einmal mit einer dicken schwarzen Linie und dann einmal mit dem ursprünglichen Textpfad oben.
Sie haben vielleicht bemerkt, dass die Schlüsselwörter to Stroke
und SimplePatchShadow
und SimpleLineShadow
nicht die üblichen Künstler-Schlüsselwörter sind ( facecolor
edgecolor usw.). Dies liegt daran, dass wir mit diesen Pfadeffekten auf einer niedrigeren Ebene von Matplotlib arbeiten. Tatsächlich werden die Schlüsselwörter für eine matplotlib.backend_bases.GraphicsContextBase
Instanz akzeptiert, die dazu bestimmt sind, das Erstellen neuer Backends zu vereinfachen - und nicht für ihre Benutzeroberfläche.
Größere Kontrolle über den Pfadeffekt-Künstler #
Wie bereits erwähnt, arbeiten einige der Pfadeffekte auf einem niedrigeren Niveau als die meisten Benutzer gewohnt sind, was bedeutet, dass das Setzen von Schlüsselwörtern wie
facecolor und edgecolor einen AttributeError auslöst. Glücklicherweise gibt es einen generischen PathPatchEffect
Pfadeffekt, der eine patches.PathPatch
Klasse mit dem ursprünglichen Pfad erstellt. Die Schlüsselwörter dazu sind identisch mit denen von patches.PathPatch
:
fig = plt.figure(figsize=(8.5, 1))
t = fig.text(0.02, 0.5, 'Hatch shadow', fontsize=75, weight=1000, va='center')
t.set_path_effects([
path_effects.PathPatchEffect(
offset=(4, -4), hatch='xxxx', facecolor='gray'),
path_effects.PathPatchEffect(
edgecolor='white', linewidth=1.1, facecolor='black')])
plt.show()