Matplotlib - Przenieś etykietę osi X w dół, ale nie znaczniki osi X.

110

Używam Matplotlib do wykreślenia histogramu. Korzystając ze wskazówek z mojego poprzedniego pytania: Matplotlib - oznacz każdy pojemnik , mniej więcej rozwiązałem problemy.

Jest jeszcze jeden ostatni problem - poprzednio - etykieta osi x („Czas (w milisekundach)”) była renderowana pod znacznikami osi X (0,00, 0,04, 0,08, 0,12 itd.)

Brak dopełnienia - etykieta osi pod figurami

Korzystając z rady Joe Kingstona (patrz pytanie powyżej), próbowałem użyć:

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

Jednak powoduje to przesunięcie zarówno znaczników osi x (0,00, 0,04, 0,08, 0,12 itd.), Jak i etykiety osi x („Czas (w milisekundach)”):

30 Wypełnienie - Przesunęły się etykiety osi i znaczniki

Czy istnieje sposób, aby przenieść tylko etykietę osi X pod trzy rzędy cyfr?

Uwaga: Może być konieczne bezpośrednie otwarcie poniższych plików PNG - Kliknij prawym przyciskiem myszy obraz, a następnie Wyświetl obraz (w FF) lub Otwórz obraz w nowej karcie (Chrome). Zmiana rozmiaru obrazu wykonana przez SO uczyniła je prawie nieczytelnymi

victorhooi
źródło

Odpowiedzi:

197

użyj parametru etykiety:

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

lub ustaw po:

ax.xaxis.labelpad = 20
HYRY
źródło
13

Jeśli zmienna ax.xaxis._autolabelpos = True, matplotlib ustawia pozycję etykiety w funkcji _update_label_position w axis.py zgodnie z (niektóre fragmenty):

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

Możesz ustawić pozycję etykiety niezależnie od znaczników, używając:

    ax.xaxis.set_label_coords(x0, y0)

która ustawia _autolabelpos na False lub jak wspomniano powyżej, zmieniając parametr labelpad.

Matthias123
źródło