Ajustando a Ordem de Desenho no Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste tutorial, aprenderemos sobre a ordem de desenho de artistas no Matplotlib e como ajustar essa ordem usando o atributo zorder. Também exploraremos como alterar a ordem para artistas individuais e o valor padrão de zorder para diferentes tipos de artistas.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Compreendendo o Zorder

O atributo zorder no Matplotlib é um número de ponto flutuante que determina a ordem de desenho dos artistas. Artistas com um zorder mais alto são desenhados sobre aqueles com um zorder mais baixo. O valor padrão de zorder depende do tipo de artista. Por exemplo, imagens têm um zorder padrão de 0, enquanto patches (retalhos) têm um zorder padrão de 1.

Alterando o Zorder

Para alterar a ordem de desenho dos artistas, podemos definir explicitamente seu atributo zorder usando o parâmetro zorder ao criar o artista. Por exemplo, podemos mover pontos sobre linhas em um gráfico de dispersão definindo o zorder dos pontos para um valor maior que o zorder da linha.

import matplotlib.pyplot as plt
import numpy as np

r = np.linspace(0.3, 1, 30)
theta = np.linspace(0, 4*np.pi, 30)
x = r * np.sin(theta)
y = r * np.cos(theta)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 3.2))

ax1.plot(x, y, 'C3', lw=3)
ax1.scatter(x, y, s=120)
ax1.set_title('Lines on top of dots')

ax2.plot(x, y, 'C3', lw=3)
ax2.scatter(x, y, s=120, zorder=2.5)  ## move dots on top of line
ax2.set_title('Dots on top of lines')

plt.tight_layout()
plt.show()

Definindo o Zorder para Ticks e Linhas de Grade

Podemos usar o método set_axisbelow() ou o parâmetro axes.axisbelow para definir o zorder de ticks (marcas) e linhas de grade.

ax = plt.axes()
ax.plot([1, 2, 3], [2, 4, 3])
ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')

Ordem Personalizada de Elementos

Também podemos definir o zorder dos elementos em uma ordem personalizada. Por exemplo, podemos definir o zorder de uma legenda para que fique entre duas linhas.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 7.5, 100)
plt.rcParams['lines.linewidth'] = 5
plt.figure()
plt.plot(x, np.sin(x), label='zorder=2', zorder=2)  ## bottom
plt.plot(x, np.sin(x+0.5), label='zorder=3',  zorder=3)
plt.axhline(0, label='zorder=2.5', color='lightgrey', zorder=2.5)
plt.title('Custom order of elements')
l = plt.legend(loc='upper right')
l.set_zorder(2.5)  ## legend between blue and orange line
plt.show()

Resumo

Neste tutorial, aprendemos sobre o atributo zorder em Matplotlib e como alterar a ordem de desenho dos artistas. Também exploramos como definir o zorder para ticks (marcas) e linhas de grade e criar uma ordem personalizada de elementos. Compreender o zorder é essencial ao criar visualizações complexas com elementos sobrepostos.