Guía de efectos de ruta #

Definición de rutas que siguen los objetos en un lienzo.

El módulo de Matplotlib patheffectsproporciona funcionalidad para aplicar una etapa de dibujo múltiple a cualquier artista que se pueda representar a través de un archivo path.Path.

Los artistas a los que se les puede aplicar un efecto de ruta incluyen patches.Patch, lines.Line2De collections.Collectionincluso text.Text. Los efectos de ruta de cada artista se pueden controlar a través del Artist.set_path_effectsmétodo, que requiere una iteración de AbstractPathEffectinstancias.

El efecto de ruta más simple es el Normalefecto, que simplemente dibuja al artista sin ningún efecto:

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()
guía de efectos de ruta

Si bien la trama no se ve diferente de lo que esperaría sin ningún efecto de ruta, el dibujo del texto ahora se ha cambiado para usar el marco de efectos de ruta, lo que abre las posibilidades de ejemplos más interesantes.

Agregar una sombra #

Un efecto de ruta mucho más interesante que Normalla sombra paralela, que podemos aplicar a cualquiera de nuestros artistas basados ​​en rutas. Las clases SimplePatchShadow y SimpleLineShadowhacen precisamente esto dibujando un parche relleno o un parche de línea debajo del artista original:

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()
guía de efectos de ruta

Observe los dos enfoques para configurar los efectos de ruta en este ejemplo. El primero usa las with*clases para incluir la funcionalidad deseada seguida automáticamente con el efecto "normal", mientras que el último define explícitamente los dos efectos de ruta a dibujar.

Hacer que un artista se destaque #

Una buena manera de hacer que los artistas se destaquen visualmente es dibujar un contorno en un color llamativo debajo del artista real. El Strokeefecto de ruta hace que esta sea una tarea relativamente 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()
guía de efectos de ruta

Es importante notar que este efecto solo funciona porque hemos dibujado la ruta del texto dos veces; una vez con una línea negra gruesa y luego una vez con la ruta de texto original en la parte superior.

Es posible que haya notado que las palabras clave para Strokey SimplePatchShadow y SimpleLineShadowno son las palabras clave habituales de los artistas ( facecolor edgecolor , etc.). Esto se debe a que con estos efectos de ruta estamos operando en un nivel más bajo de Matplotlib. De hecho, las palabras clave que se aceptan son las de una matplotlib.backend_bases.GraphicsContextBaseinstancia, que han sido diseñadas para facilitar la creación de nuevos backends, y no para su interfaz de usuario.

Mayor control del artista del efecto de ruta #

Como ya se mencionó, algunos de los efectos de ruta operan a un nivel más bajo que el que la mayoría de los usuarios están acostumbrados, lo que significa que establecer palabras clave como color de cara y color de borde genera un AttributeError. Afortunadamente, existe un PathPatchEffectefecto de ruta genérico que crea una patches.PathPatch clase con la ruta original. Las palabras clave a este efecto son idénticas a las 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()
guía de efectos de ruta

Galería generada por Sphinx-Gallery