Noter
Cliquez ici pour télécharger l'exemple de code complet
Guide des effets de chemin #
Définir les chemins suivis par les objets sur un canevas.
Le module de Matplotlib patheffects
fournit des fonctionnalités pour appliquer une étape de dessin multiple à n'importe quel artiste qui peut être rendu via un fichier path.Path
.
Les artistes auxquels un effet de chemin peut être appliqué incluent patches.Patch
,
lines.Line2D
et collections.Collection
même text.Text
. Les effets de chemin de chaque artiste peuvent être contrôlés via la Artist.set_path_effects
méthode, qui prend un itérable d' AbstractPathEffect
instances.
L'effet de chemin le plus simple est l' Normal
effet, qui dessine simplement l'artiste sans aucun effet :
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()
Alors que l'intrigue ne semble pas différente de ce à quoi vous vous attendriez sans aucun effet de chemin, le dessin du texte a maintenant été modifié pour utiliser le cadre des effets de chemin, ouvrant la possibilité d'exemples plus intéressants.
Ajouter une ombre #
Un effet de chemin beaucoup plus intéressant que Normal
l'ombre portée, que nous pouvons appliquer à n'importe lequel de nos artistes basés sur le chemin. Les classes SimplePatchShadow
et SimpleLineShadow
font précisément cela en dessinant soit un patch rempli, soit un patch de ligne sous l'artiste d'origine :
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()
Notez les deux approches pour définir les effets de chemin dans cet exemple. Le premier utilise les with*
classes pour inclure la fonctionnalité souhaitée suivie automatiquement de l'effet "normal", tandis que le second définit explicitement les deux effets de chemin à dessiner.
Faire ressortir un artiste #
Une bonne façon de faire ressortir visuellement les artistes est de dessiner un contour dans une couleur vive sous l'artiste réel. L' Stroke
effet de chemin en fait une tâche relativement simple :
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()
Il est important de noter que cet effet ne fonctionne que parce que nous avons tracé le chemin du texte deux fois ; une fois avec une ligne noire épaisse, puis une fois avec le chemin du texte d'origine en haut.
Vous avez peut-être remarqué que les mots-clés to Stroke
et SimplePatchShadow
et SimpleLineShadow
ne sont pas les mots-clés habituels de l'artiste ( facecolor
edgecolor , etc.). En effet, avec ces effets de chemin, nous opérons à un niveau inférieur de Matplotlib. En fait, les mots-clés acceptés sont ceux d'une matplotlib.backend_bases.GraphicsContextBase
instance, qui ont été conçus pour faciliter la création de nouveaux backends - et non pour son interface utilisateur.
Meilleur contrôle de l'artiste de l'effet de chemin #
Comme déjà mentionné, certains des effets de chemin fonctionnent à un niveau inférieur auquel la plupart des utilisateurs seront habitués, ce qui signifie que la définition de mots-clés tels que
facecolor et edgecolor génère une AttributeError. Heureusement, il existe un PathPatchEffect
effet de chemin générique qui crée une patches.PathPatch
classe avec le chemin d'origine. Les mots clés à cet effet sont identiques à ceux de 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()