Я нахожу это довольно хитрым, но есть некоторая информация об этом здесь, в MatPlotLib FAQ . Это довольно громоздко и требует выяснения того, какое место занимают отдельные элементы (тиклабели) ...
Обновление:
На странице указано, что функция tight_layout()
- это самый простой способ, который пытается автоматически исправить интервал.
В противном случае в нем показаны способы получения размеров различных элементов (например, меток), чтобы вы могли затем корректировать расстояния / положения элементов ваших осей. Вот пример с вышеупомянутой страницы часто задаваемых вопросов, которая определяет ширину очень широкой метки оси Y и соответственно регулирует ширину оси:
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.show()