Frage Matplotlib - Bewegen Sie das X-Achsen-Etikett nach unten, aber nicht X-Achsen-Zecken


Ich verwende Matplotlib, um ein Histogramm zu zeichnen. Mit Tipps von meiner vorherigen Frage: Matplotlib - Beschrifte jeden Behälter, Ich habe mehr oder weniger die Knicke ausgearbeitet.

Es gibt ein abschließendes Problem - zuvor wurde die X-Achsenbeschriftung ("Zeit (in Millisekunden)") unter den X-Achsen-Markierungen (0,00, 0,04, 0,08, 0,12 usw.) gerendert.

No padding - Axis label underneath figures

Mit dem Rat von Joe Kingston (siehe Frage oben) habe ich versucht mit:

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

Dies verschiebt jedoch sowohl die X-Achsen-Markierungen (0,00, 0,04, 0,08, 0,12 usw.) als auch die X-Achsen-Beschriftung ("Zeit (in Millisekunden)"):

30 Padding - Both Axis Label and Tick Marks have Moved

Gibt es eine Möglichkeit, nur die X-Achsenbeschriftung unter die drei Zahlenreihen zu verschieben?

Hinweis: Möglicherweise müssen Sie die unten aufgeführten PNGs direkt öffnen. Klicken Sie mit der rechten Maustaste auf das Bild und dann auf Bild anzeigen (in FF) oder öffnen Sie das Bild auf der neuen Registerkarte (Chrome). Die von SO durchgeführte Bildgrößenänderung hat sie fast unlesbar gemacht


75
2018-06-20 02:36


Ursprung


Antworten:


Verwenden Sie den labelpad-Parameter:

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

oder setze es nach:

ax.xaxis.labelpad = 20

130
2018-06-20 04:13



Wenn die Variable ax.xaxis._autolabelpos = True ist, setzt matplotlib die Label-Position in der Funktion _update_label_position in axis.py entsprechend (einige Auszüge):

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

Sie können die Label-Position unabhängig von den Ticks setzen:

    ax.xaxis.set_label_coords(x0, y0)

das setzt _autolabelpos auf False oder wie oben erwähnt durch Ändern des labelpad-Parameters.


10
2017-07-29 14:57