Почему мой xlabel отрезан в моем сюжете matplotlib? - PullRequest
228 голосов
/ 21 июля 2011

Я строю набор данных, используя matplotlib, где у меня есть достаточно «высокий» xlabel (это формула, представленная в TeX, которая содержит дробь и, следовательно, имеет высший эквивалент пары строк текста).

В любом случае, нижняя часть формулы всегда обрезается, когда я рисую фигуры.Изменение размера фигуры, кажется, не помогает этому, и я не смог понять, как сдвинуть ось X вверх, чтобы освободить место для xlabel.Нечто подобное могло бы стать разумным временным решением, но было бы неплохо иметь способ, позволяющий matplotlib автоматически распознавать, что метка обрезается, и соответственно изменять ее размер.

Вот пример того, что я имею в виду:

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()

в то время как вы можете видеть весь ylabel, xlabel отсекается внизу.

В случае, если это машинно-специфическая проблема, я запускаю это на OSX 10.6.8 с matplotlib 1.0.0

Ответы [ 6 ]

344 голосов
/ 21 июля 2011

Использование:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)

чтобы освободить место для этикетки.

Edit:

Поскольку я дал ответ, matplotlib добавил функцию tight_layout(). Поэтому я предлагаю использовать его:

plt.tight_layout()

должен освободить место для xlabel.

122 голосов
/ 30 июня 2013

Простой вариант - настроить matplotlib для автоматической настройки размера графика.Он отлично работает для меня, и я не уверен, почему он не активирован по умолчанию.

Метод 1

Установите это в вашем файле matplotlibrc

figure.autolayout : True

См. Здесь для получения дополнительной информации о настройке файла matplotlibrc: http://matplotlib.org/users/customizing.html

Метод 2

Обновите rcParams во время выполнения, как это

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

Преимущество использования этого подхода заключается в том, что ваш код будет отображать одни и те же графики на машинах с разной конфигурацией.

40 голосов
/ 01 октября 2018

Если вы хотите сохранить его в файл, вы решаете его, используя аргумент bbox_inches="tight":

plt.savefig('myfile.png', bbox_inches = "tight")
5 голосов
/ 15 ноября 2012

Вы также можете установить собственный отступ как значения по умолчанию в вашем $HOME/.matplotlib/matplotlib_rc следующим образом.В приведенном ниже примере я изменил нижнюю и левую готовые поля:

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...
2 голосов
/ 13 сентября 2018

Помещение plot.tight_layout() после всех изменений на графике, перед тем как show() или savefig() решит проблему.

1 голос
/ 13 февраля 2019

plt.autoscale() работал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...