Estou familiarizado com as seguintes perguntas:
Matplotlib savefig com uma legenda fora da plotagem
Como colocar a lenda fora da trama
Parece que as respostas nessas perguntas têm o luxo de poder mexer com o encolhimento exato do eixo, para que a legenda se encaixe.
Diminuir os eixos, no entanto, não é uma solução ideal, pois diminui os dados, dificultando a interpretação; particularmente quando é complexo e há muitas coisas acontecendo ... portanto, precisamos de uma grande lenda
O exemplo de uma legenda complexa na documentação demonstra a necessidade disso, porque a legenda em sua plotagem na verdade obscurece completamente vários pontos de dados.
http://matplotlib.sourceforge.net/users/legend_guide.html#legend-of-complex-plots
O que eu gostaria de poder fazer é expandir dinamicamente o tamanho da caixa de figuras para acomodar a legenda da figura em expansão.
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(x, np.sin(x), label='Sine')
ax.plot(x, np.cos(x), label='Cosine')
ax.plot(x, np.arctan(x), label='Inverse tan')
lgd = ax.legend(loc=9, bbox_to_anchor=(0.5,0))
ax.grid('on')
Observe como o rótulo final 'bronzeado inverso' está realmente fora da caixa de figuras (e parece muito ruim - não qualidade de publicação!)
Finalmente, me disseram que esse é um comportamento normal no R e no LaTeX, então estou um pouco confuso por que isso é tão difícil em python ... Existe uma razão histórica? O Matlab é igualmente pobre nesse assunto?
Eu tenho a versão (apenas um pouco) mais longa desse código em pastebin http://pastebin.com/grVjc007
tight_layout()
deve ser alterado para levar em consideração as lendas.