Matplotlib - Переместить метку оси X вниз, но не отметки оси X - PullRequest
91 голосов
/ 20 июня 2011

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

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

No padding - Axis label underneath figures

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

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

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

30 Padding - Both Axis Label and Tick Marks have Moved

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

Примечание: вам может понадобиться открыть PNG ниже: щелкните правой кнопкой мыши на изображении, затем просмотрите изображение (в FF) или откройте изображение в новой вкладке (Chrome). Изменение размера изображения, сделанное SO, сделало их почти нечитаемыми

Ответы [ 2 ]

165 голосов
/ 20 июня 2011

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

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

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

ax.xaxis.labelpad = 20
10 голосов
/ 29 июля 2014

Если переменная 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.

...