Вот еще одно решение, похожее на добавление bbox_extra_artists
и bbox_inches
, где вам не нужно, чтобы ваши дополнительные художники были в рамках вашего звонка savefig
. Я придумал это, так как я генерирую большую часть своего графика внутри функций.
Вместо того, чтобы добавлять все свои дополнения в ограничивающий прямоугольник, когда вы хотите их записать, вы можете добавлять их заранее художникам Figure
. Используя что-то похожее на ответ Фрэнка Дернонкура выше :
import matplotlib.pyplot as plt
# data
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]
# plotting function
def gen_plot(x, y):
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)
lgd = ax.legend( [ "Lag " + str(lag) for lag in all_x], loc="center right", bbox_to_anchor=(1.3, 0.5))
fig.artists.append(lgd) # Here's the change
ax.set_title("Title")
ax.set_xlabel("x label")
ax.set_ylabel("y label")
return fig
# plotting
fig = gen_plot(all_x, all_y)
# No need for `bbox_extra_artists`
fig.savefig("image_output.png", dpi=300, format="png", bbox_inches="tight")
Вот сгенерированный сюжет.