Мне нужно сохранить фигуры matplotlib в pdf. Я следую инструкциям на Matplotlib howto, за исключением того, что вместо отображения результатов я сохраняю его в pdf. Как ни странно, размер холста не зависит от размера холста. И наоборот, сохранение в png правильно работает с увеличенным холстом.проблемы с ограничивающей коробкой с сохранением в pdf
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
ax.set_yticks((2,5,7))
labels = ax.set_yticklabels(('really, really, really', 'long', 'labels'))
def on_draw(event):
bboxes = []
for label in labels:
bbox = label.get_window_extent()
# the figure transform goes from relative coords->pixels and we
# want the inverse of that
bboxi = bbox.inverse_transformed(fig.transFigure)
bboxes.append(bboxi)
# this is the bbox that bounds all the bboxes, again in relative
# figure coords
bbox = mtransforms.Bbox.union(bboxes)
if fig.subplotpars.left < bbox.width:
# we need to move it over
fig.subplots_adjust(left=1.1*bbox.width) # pad a little
fig.canvas.draw()
return False
fig.canvas.mpl_connect('draw_event', on_draw)
plt.savefig("test.pdf", format="pdf")
ОБНОВЛЕНИЕ
plt.tight_layout()
делает это для заголовка и ось клещей, но игнорирует легенду, если он находится вне кадра, как и в приведенном ниже рисунке. Обратите внимание, что я поместил легенду справа от рисунка.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
p1, = plt.plot(range(10))
p2, = plt.plot(range(10,0,-1))
ax.set_yticks((2,5,7))
plt.labels = ax.set_yticklabels(('really, really, really', 'long', 'labels'))
plt.legend([p2, p1], ["line with a loong label", "line with an even longer label, dude!"],\
loc="center left", bbox_to_anchor=(1, 0.5))
plt.tight_layout()
plt.savefig("test.pdf", format="pdf")
см http://stackoverflow.com/questions/15882249/matplotlib-aligning-y-ticks-to-the-left/15883858#15883858 – tacaswell
и Http: //stackoverflow.com/questions/18769870/matplotlib-wxpython-not-sizing-correctly-with-legend/18771068#18771068 – tacaswell