Guia de efeitos de caminho #

Definir caminhos que os objetos seguem em uma tela.

O módulo do Matplotlib patheffectsfornece funcionalidade para aplicar um estágio de desenho múltiplo a qualquer artista que pode ser renderizado por meio de um arquivo path.Path.

Artistas que podem ter um efeito de caminho aplicado a eles incluem patches.Patch, lines.Line2De collections.Collectionaté mesmo text.Text. Os efeitos do caminho de cada artista podem ser controlados por meio do Artist.set_path_effectsmétodo, que requer uma iteração de AbstractPathEffectinstâncias.

O efeito de caminho mais simples é o Normalefeito, que simplesmente desenha o artista sem nenhum efeito:

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()
guia de patheffects

Embora o enredo não pareça diferente do que você esperaria sem nenhum efeito de caminho, o desenho do texto agora foi alterado para usar a estrutura de efeitos de caminho, abrindo possibilidades para exemplos mais interessantes.

Adicionando uma sombra #

Um efeito de caminho muito mais interessante do que Normala sombra projetada, que podemos aplicar a qualquer um de nossos artistas baseados em caminhos. As classes SimplePatchShadow e SimpleLineShadowfazem exatamente isso desenhando um patch preenchido ou um patch de linha abaixo do 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()
guia de patheffects

Observe as duas abordagens para definir os efeitos de caminho neste exemplo. O primeiro usa as with*classes para incluir a funcionalidade desejada automaticamente seguida do efeito "normal", enquanto o último define explicitamente os dois efeitos de caminho a serem desenhados.

Fazendo um artista se destacar #

Uma boa maneira de fazer os artistas se destacarem visualmente é desenhar um contorno em uma cor ousada abaixo do artista real. O Strokeefeito de caminho torna esta tarefa relativamente simples:

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()
guia de patheffects

É importante observar que esse efeito só funciona porque desenhamos o caminho do texto duas vezes; uma vez com uma linha preta grossa e, em seguida, uma vez com o caminho do texto original no topo.

Você deve ter notado que as palavras-chave to Strokee SimplePatchShadow e SimpleLineShadownão são as palavras-chave usuais do Artista ( facecolor edgecolor , etc.). Isso ocorre porque, com esses efeitos de caminho, estamos operando no nível inferior do Matplotlib. Na verdade, as palavras-chave aceitas são as de uma matplotlib.backend_bases.GraphicsContextBaseinstância, que foram projetadas para facilitar a criação de novos back-ends - e não para sua interface de usuário.

Maior controle do artista de efeito de caminho #

Como já mencionado, alguns dos efeitos de caminho operam em um nível mais baixo do que a maioria dos usuários está acostumado, o que significa que definir palavras-chave como facecolor e edgecolor gera um AttributeError. Felizmente existe um PathPatchEffectefeito de caminho genérico que cria uma patches.PathPatch classe com o caminho original. As palavras-chave para este efeito são idênticas às 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()
guia de patheffects

Galeria gerada por Sphinx-Gallery