Я знаком со следующими вопросами:
Matplotlib savefig с легендой вне сюжета
Кажется, что ответы на эти вопросы могут позволить себе роскошь возиться с точным сжатием оси, чтобы легенда подходила.
Однако сжатие осей не является идеальным решением, поскольку оно уменьшает размер данных, затрудняя их интерпретацию; особенно когда это сложно и происходит много всего ... отсюда и нужна большая легенда
Пример сложной легенды в документации демонстрирует необходимость в этом, потому что легенда на их графике фактически полностью скрывает несколько точек данных.
http://matplotlib.sourceforge.net/users/legend_guide.html#legend-of-complex-plots
То, что я хотел бы сделать, это динамически увеличивать размер поля рисунка, чтобы приспособить расширяющуюся легенду фигуры.
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')
Обратите внимание, что окончательный ярлык «Обратный загар» на самом деле находится за рамкой рисунка (и выглядит плохо обрезанным, а не качеством публикации!)
Наконец, мне сказали, что это нормальное поведение в R и LaTeX, поэтому я немного запутался, почему это так сложно в python ... Есть ли историческая причина? Матлаб одинаково беден в этом вопросе?
У меня есть (только немного) более длинная версия этого кода на pastebin http://pastebin.com/grVjc007
tight_layout()
должно быть изменено, чтобы принять во внимание легенды.