web-dev-qa-db-fra.com

Matplotlib - Déplace l'étiquette de l'axe X vers le bas, mais pas les ticks de l'axe X

J'utilise Matplotlib pour tracer un histogramme. En utilisant les conseils de ma question précédente: Matplotlib - étiquetez chaque bac , j'ai plus ou moins éliminé les problèmes.

Il y a un dernier problème - précédemment - l'étiquette de l'axe des abscisses ("Time (en millisecondes)") était restituée sous les graduations de l'axe des abscisses (0.00, 0.04, 0.08, 0.12, etc.).

No padding - Axis label underneath figures

En suivant les conseils de Joe Kingston (voir la question ci-dessus), j’ai essayé d’utiliser:

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

Toutefois, cela déplace à la fois les graduations de l'axe des abscisses (0.00, 0.04, 0.08, 0.12, etc.), ainsi que l'étiquette de l'axe des abscisses ("Temps (en millisecondes)"):

30 Padding - Both Axis Label and Tick Marks have Moved

Existe-t-il un moyen de ne déplacer que l'étiquette de l'axe des x sous les trois rangées de chiffres?

Nb: Vous devrez peut-être ouvrir directement les fichiers PNG ci-dessous - Cliquez avec le bouton droit de la souris sur l'image, puis Afficher l'image (au format FF) ou Ouvrir l'image dans un nouvel onglet (Chrome). Le redimensionnement de l'image effectué par SO les a rendues presque illisibles

92
victorhooi

utiliser le paramètre labelpad:

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

ou le définir après:

ax.xaxis.labelpad = 20
167
HYRY

Si la variable ax.xaxis._autolabelpos = True, matplotlib définit la position de l'étiquette dans la fonction _update_label_position dans axis.py en fonction de (quelques extraits):

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

Vous pouvez définir la position de l'étiquette indépendamment des ticks en utilisant:

    ax.xaxis.set_label_coords(x0, y0)

qui définit _autolabelpos sur False ou comme mentionné ci-dessus en modifiant le paramètre labelpad.

11
Matthias123