Почему моя xlabel отрезана на моем участке matplotlib?

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

В любом случае, нижняя часть формулы всегда обрезается, когда я рисую цифры. Изменение размера фигуры, похоже, не помогает этому, и я не смог понять, как сдвинуть ось "вверх", чтобы освободить место для 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()

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

В случае, если это проблема, связанная с машиной, я запускаю ее на OSX 10.6.8 с помощью matplotlib 1.0.0

Ответ 1

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

import matplotlib.pyplot as plt

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

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

Edit:

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

plt.tight_layout()

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

Ответ 2

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

Метод 1

Задайте это в файле matplotlibrc

figure.autolayout : True

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

Метод 2

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

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

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

Ответ 3

Вы также можете настроить пользовательские дополнения как значения по умолчанию в $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
...