44 votes

Comment définir mon xlabel à la fin de xaxis

Je veux que mon axe x ait l'étiquette comme ce format

 0 1 2 3 4 5 Xlabel

mais j'essaie le code ci-dessous, cela me donne 2 lignes

 self.axes.set_xticks(np.arange(0,6,1))
self.axes.set_xlabel('Xlabel', fontsize=9,x=1,y=1)

=> mon résultat :(

 0 1 2 3 4 5 
        Xlabel 

23voto

Joe Kington Points 68089

En plus de ce que @Yann a déjà dit, c'est en fait plus facile de le faire avec annotate . Il restera également dans la bonne position lors d'un zoom/d'un panoramique.

 import matplotlib.pyplot as plt
import matplotlib as mpl

ticklabelpad = mpl.rcParams['xtick.major.pad']

fig, ax = plt.subplots()
ax.set_xlim([0, 5])

# Add the label as annotation. The "5" is the padding betweent the right side
# of the axis and the label...
ax.annotate('XLabel', xy=(1,0), xytext=(5, -ticklabelpad), ha='left', va='top',
            xycoords='axes fraction', textcoords='offset points')

plt.show()

entrez la description de l'image ici

7voto

Dmitry Davydov Points 753

Voici ma variante d'utilisation de la méthode @JoeKington. Je remplace l'étiquette de la dernière coche par le nom de l'axe. J'ai d'abord défini les dernières coches sur des chaînes vides, puis j'utilise annotate(). J'ai utilisé annotate() car je dois contrôler la taille de la police de l'étiquette de l'axe.

 import numpy as np
import matplotlib.pyplot as plt

plt.xlim(50, 70)
plt.ylim(100, 250)

ax = plt.gca()
# clears last tick label
xticks = ax.get_xticks().tolist()
xticks[-1] = ''
ax.set_xticklabels(xticks)
yticks = ax.get_yticks().tolist()
yticks[-1] = ''
ax.set_yticklabels(yticks)
# sets axes labels on both ends
ax.annotate('$t$', xy=(0.98, 0), ha='left', va='top', xycoords='axes fraction', fontsize=20)
ax.annotate('$x$', xy=(0, 1), xytext=(-15,2), ha='left', va='top', xycoords='axes fraction', textcoords='offset points', fontsize=20)

plt.show(block=True)

Peut-être que quelqu'un connaît une manière plus élégante de le faire, car c'est une opération ridiculement complexe.

entrez la description de l'image ici

4voto

Bastian Points 91

J'utilise la solution fournie par @JoeKington, avec l'extension d'avoir des propriétés de police d'étiquette imposées sur le texte produit par ax.annotate(...) .

Ceci est important lorsque les étiquettes d'axe sont formatées différemment des autres textes.

 import matplotlib.pyplot as plt
import matplotlib as mpl

ticklabelpad = mpl.rcParams['xtick.major.pad']

fig, ax = plt.subplots()
ax.set_xlim([0, 5])

dx_in_points = 5
fontproperties = ax.xaxis.get_label().get_fontproperties()

ax.annotate('XLabel', xy=(1,0), xytext=(dx_in_points, -ticklabelpad), ha='left', va='top',
         xycoords='axes fraction', textcoords='offset points', fontproperties=fontproperties)

plt.show()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X