Como colocar a lenda fora do terreno em Matplotlib

  1. Exemplo de bbox_to_anchor
  2. bbox_extra_artists e bbox_inches para evitar que a Legend Box seja cortada

A legenda poderia ser colocada fora do terreno no Matplotlib utilizando bbox_to_anchor. bbox significa caixa de delimitação que acomoda a legenda.

plt.legend(bbox_to_anchor=(1.05, 1))

Ela coloca a legenda na posição (1.05, 1) na coordenada dos eixos. (0, 0) é o canto inferior esquerdo, e (1.0, 1.0) é o canto superior direito da coordenada dos eixos.

O tamanho real e a posição da caixa delimitadora da legenda são definidos com o parâmetro de 4 tubos de bbox_to_anchor e loc na plt.legend.

plt.legend(bbox_to_anchor=(x0, y0, width, height), loc=)

A width e height são a largura e a altura da caixa de legenda, e (x0, y0) é a coordenada do loc da caixa delimitadora.

O valor de loc poderia ser o número ou string que tem a relação a seguir,

Número Loc Loc String
0 best
1 upper right
2 upper left
3 lower left
4 lower right
5 right
6 center left
7 center right
8 lower center
9 upper center
10 center
plt.legend(bbox_to_anchor=(1.05, 1.0, 0.3, 0.2), loc='upper left')

O código acima significa que a caixa de legenda é posicionada na coordenada dos eixos (1.05, 1.0) que tem a largura de 0.3 e a altura de 0.2, onde (1.05, 1.0) é a coordenada do canto superior esquerdo da caixa de delimitação da legenda.

Exemplo de bbox_to_anchor

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x), label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")


plt.legend(bbox_to_anchor=(1.05, 1.0), loc='upper left')
plt.tight_layout()
plt.show()

Exemplo Matplotlib Legenda bbox_to_anchor

O plt.tight_layout() faz com que os subquadros se encaixem bem na figura.

A caixa de legendas seria cortada se tight_layout() não fosse chamada.

Matplotlib Legenda bbox_to_anchor Cropped

bbox_extra_artists e bbox_inches para evitar que a Legend Box seja cortada

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x), label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")


lg = plt.legend(bbox_to_anchor=(1.05, 1.0), loc='upper left')

plt.savefig('example.png', 
            dpi=300, 
            format='png', 
            bbox_extra_artists=(lg,), 
            bbox_inches='tight')

A lista de [bbox_extra_artists especifica a lista de Artist que será levada em consideração quando se calcular a bbox apertada.

Se a bbox_inches estiver definida para ser tight, ela calculará a caixa apertada da figura.

Artigo relacionado - Matplotlib Legend

  • Como criar uma única legenda para todos os subquadros em Matplotlib
  • Como mudar o tamanho da fonte Legenda em Matplotlib