Matplotlib - перемещает метку оси X вниз, но не метки оси X

110

Я использую Matplotlib для построения гистограммы. Используя советы из моего предыдущего вопроса: Matplotlib - пометьте каждую корзину , я более или менее разобрался с петлями.

Есть одна последняя проблема - ранее метка оси x («Время (в миллисекундах)») отображалась под отметками оси x (0,00, 0,04, 0,08, 0,12 и т. Д.)

Без отступов - метка оси под цифрами

Воспользовавшись советом Джо Кингстона (см. Вопрос выше), я попытался использовать:

ax.tick_params(axis='x', pad=30)

Однако при этом перемещаются как отметки оси X (0,00, 0,04, 0,08, 0,12 и т. Д.), Так и метка оси x («Время (в миллисекундах)»):

30 Padding - И метка оси, и галочки переместились

Есть ли способ переместить только метку оси X под тремя рядами фигур?

Nb. Возможно, вам потребуется напрямую открыть изображения PNG ниже - щелкните изображение правой кнопкой мыши, затем «Просмотреть изображение» (в FF) или «Открыть изображение в новой вкладке (Chrome)». Изменение размера изображения, выполненное SO, сделало их почти нечитаемыми

Викторхуи
источник

Ответы:

197

использовать параметр labelpad:

pl.xlabel("...", labelpad=20)

или установите его после:

ax.xaxis.labelpad = 20
HYRY
источник
13

Если переменная ax.xaxis._autolabelpos = True, matplotlib устанавливает позицию метки в функции _update_label_position в axis.py согласно (некоторые выдержки):

    bboxes, bboxes2 = self._get_tick_bboxes(ticks_to_draw, renderer)
    bbox = mtransforms.Bbox.union(bboxes)
    bottom = bbox.y0
    x, y = self.label.get_position()
    self.label.set_position((x, bottom - self.labelpad * self.figure.dpi / 72.0))

Вы можете установить положение метки независимо от тиков, используя:

    ax.xaxis.set_label_coords(x0, y0)

который устанавливает _autolabelpos в значение False или, как указано выше, путем изменения параметра labelpad.

Маттиас123
источник