Matplotlib - Mova o rótulo do eixo X para baixo, mas não as marcações do eixo X

109

Estou usando o Matplotlib para traçar um histograma. Usando dicas da minha pergunta anterior: Matplotlib - rotule cada compartimento , eu estou mais ou menos errado .

Há um último problema - anteriormente - o rótulo do eixo x ("Tempo (em milissegundos)") estava sendo renderizado abaixo das marcas do eixo x (0,00, 0,04, 0,08, 0,12 etc.)

Sem preenchimento - etiqueta do eixo abaixo das figuras

Seguindo o conselho de Joe Kingston (veja a pergunta acima), tentei usar:

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

No entanto, isso move as marcas do eixo x (0,00, 0,04, 0,08, 0,12 etc.), bem como o rótulo do eixo x ("Tempo (em milissegundos)"):

30 Preenchimento - Tanto o rótulo do eixo quanto as marcas de seleção foram movidos

Existe alguma maneira de mover apenas o rótulo do eixo x para abaixo das três linhas de figuras?

Nb: Você pode precisar abrir os PNGs abaixo diretamente - Clique com o botão direito na imagem, em seguida, View Image (em FF), ou Open image in new tab (Chrome). O redimensionamento da imagem feito pelo SO tornou-as quase ilegíveis

victorhooi
fonte

Respostas:

196

usar o parâmetro do rótulo:

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

ou defina-o após:

ax.xaxis.labelpad = 20
HYRY
fonte
13

Se a variável ax.xaxis._autolabelpos = True, matplotlib define a posição do rótulo na função _update_label_position em axis.py de acordo com (alguns trechos):

    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))

Você pode definir a posição do rótulo independentemente dos carrapatos usando:

    ax.xaxis.set_label_coords(x0, y0)

que define _autolabelpos como False ou conforme mencionado acima, alterando o parâmetro do labelpad.

Matthias123
fonte