Matplotlib é uma poderosa biblioteca Python para criar visualizações. No entanto, ao trabalhar com múltiplos subplots, a gestão de legendas pode tornar-se complexa. Este artigo fornece métodos eficientes para criar uma única legenda unificada em todos os seus subplots.
Sumário
- Compreendendo Subplots no Matplotlib
- Método 1: Usando
fig.legend()
- Método 2: Personalizando o posicionamento e a aparência da legenda
- Método 3: Lidando com múltiplas linhas por subplot
- Conclusão
- FAQ
Compreendendo Subplots no Matplotlib
Subplots organizam múltiplos gráficos dentro de uma única figura. No Matplotlib, você os cria usando matplotlib.pyplot.subplots()
, que retorna um objeto figura e um array de objetos axes (um por subplot).
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2) # Grade 2x2 de subplots
# Plota dados em cada subplot
axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Linha 1')
axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Linha 2')
axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Linha 1')
axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Linha 2')
plt.show()
Isso cria uma grade 2×2, cada uma com sua própria legenda. Vamos consolidá-las em uma única legenda.
Método 1: Usando fig.legend()
A abordagem mais simples usa o método legend()
do objeto figura. Isso requer a coleta de todos os identificadores e rótulos da legenda.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2)
lines1, = axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Linha 1')
lines2, = axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Linha 2')
lines3, = axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Linha 1')
lines4, = axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Linha 2')
# Coleta identificadores e rótulos únicos
handles = [lines1, lines2]
labels = [h.get_label() for h in handles]
fig.legend(handles, labels, loc='upper right')
plt.show()
Nota: Usamos apenas identificadores únicos para evitar duplicatas na legenda. loc
especifica a posição da legenda.
Método 2: Personalizando o posicionamento e a aparência da legenda
Você pode personalizar a localização, borda, tamanho da fonte e muito mais da legenda.
import matplotlib.pyplot as plt
# ... (código de plotagem do Método 1) ...
fig.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), ncol=2, frameon=True, fontsize=12)
plt.show()
Aqui, posicionamos a legenda no centro inferior, ajustamos a posição vertical com bbox_to_anchor
, usamos duas colunas (ncol=2
), adicionamos uma borda (frameon=True
) e aumentamos o tamanho da fonte.
Método 3: Lidando com múltiplas linhas por subplot
Para múltiplas linhas dentro de um subplot, colete todos os identificadores e rótulos relevantes.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
line1, = ax.plot([1, 2, 3], [4, 5, 6], label='Linha 1')
line2, = ax.plot([1, 2, 3], [7, 8, 9], label='Linha 2')
line3, = ax.plot([1, 2, 3], [10, 11, 12], label='Linha 3')
fig.legend([line1, line2, line3], [line1.get_label(), line2.get_label(), line3.get_label()], loc='best')
plt.show()
Conclusão
Criar uma única legenda para todos os subplots melhora a clareza e a legibilidade de suas visualizações Matplotlib. Os métodos mostrados acima, usando fig.legend()
e gerenciamento adequado de identificadores/rótulos, oferecem controle sobre o posicionamento e a aparência da legenda.
FAQ
- P: E se eu tiver estilos de linha diferentes? R: A legenda refletirá automaticamente essas diferenças.
- P: Posso usar cores diferentes para o mesmo rótulo? R: Sim, mas a legenda mostrará apenas uma cor por rótulo. Use rótulos distintos para diferenciar.
- P: Minha legenda sobrepõe gráficos. R: Ajuste
bbox_to_anchor
,loc
, tamanho da fonte ou tamanho da figura.