Data Visualization

Dominando Legendas Matplotlib: Criando uma Legenda Unificada para Todos os Subplots

Spread the love

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

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *