HOWTO · Matplotlib
Fixer les valeurs de l'axe X dans Matplotlib
Ce tutoriel explique comment utiliser la fonction `matplotlib.pyplot.xticks()` pour choisir les graduations de l’axe des x et, si besoin, leur attribuer des libellés.
Sur cette page
Utilisez matplotlib.pyplot.xticks() pour choisir l’emplacement des graduations de l’axe des x et, si vous le souhaitez, le texte affiché à ces emplacements. Les positions des graduations définissent les coordonnées horizontales ; elles ne modifient ni les données tracées ni le titre de l’axe. Pour obtenir un graphique lisible, faites correspondre chaque libellé à la position et au point de données qu’il décrit.
Définir les positions et les libellés des graduations de l’axe des x
Le premier argument de xticks() est une séquence de positions. Le deuxième argument, facultatif, fournit un libellé pour chaque position. Les deux séquences doivent avoir la même longueur et conserver le même ordre. L’exemple suivant réunit dans une même figure des libellés personnalisés, un espacement numérique, une variante utilisant des indices régulièrement espacés et un nombre réduit de libellés de catégories inclinés.
import matplotlib.pyplot as plt
x = [1, 2, 5, 9]
y = [3, 5, 4, 8]
labels = ['Jan', 'Feb', 'May', 'Sep']
categories = ['North region', 'South region', 'East region', 'West region', 'Central region']
values = [12, 9, 14, 7, 11]
fig, axes = plt.subplots(2, 2, figsize=(10, 7))
axes[0, 0].plot(x, y, marker='o')
axes[0, 0].set_title('Custom labels')
axes[0, 0].set_xlabel('Month')
axes[0, 0].set_ylabel('Value')
plt.sca(axes[0, 0])
plt.xticks(x, labels)
axes[0, 1].plot(x, y, marker='o')
axes[0, 1].set_title('Numeric spacing')
axes[0, 1].set_xlabel('X value')
axes[0, 1].set_ylabel('Value')
index_positions = list(range(len(x)))
axes[1, 0].plot(index_positions, y, marker='o')
axes[1, 0].set_title('Evenly spaced positions')
axes[1, 0].set_xlabel('Month')
axes[1, 0].set_ylabel('Value')
axes[1, 0].set_xticks(index_positions)
axes[1, 0].set_xticklabels(labels)
axes[1, 1].bar(categories, values)
axes[1, 1].set_title('Fewer, rotated category labels')
axes[1, 1].set_ylabel('Value')
axes[1, 1].set_xticks([0, 2, 4])
axes[1, 1].set_xticklabels(categories[::2])
plt.sca(axes[1, 1])
plt.xticks(rotation=35, ha='right')
fig.tight_layout()
plt.show()
Le graphique en haut à gauche associe quatre positions à quatre noms de mois. Le graphique numérique utilise les valeurs x réelles : l’écart entre 2 et 5 est donc plus grand que celui entre 1 et 2. Le graphique en bas à gauche utilise plutôt les positions de 0 à 3. Les mois y sont ainsi espacés régulièrement, tout en gardant chaque valeur associée au mois correspondant. Le dernier graphique affiche cinq barres, mais ne place des libellés qu’aux positions 0, 2 et 4 afin de réduire l’encombrement ; ces libellés sont ensuite inclinés et alignés à droite. Les libellés visibles dans cet exemple restent en anglais, car le bloc de code d’origine est conservé à l’identique. Exécutez le script dans un environnement Python où Matplotlib est installé ; aucun résultat capturé n’est fourni ici.
Gérer les valeurs x espacées de façon inégale
Un axe numérique représente des distances numériques. Si vos mesures correspondent aux valeurs x 1, 2, 5 et 9, les tracer à ces positions laisse, à juste titre, des intervalles plus grands entre 2 et 5, puis entre 5 et 9. Remplacer les libellés des graduations par des noms de mois ne change pas ces coordonnées. Conservez cet espacement lorsque la distance ou le temps écoulé a un sens.
Si vous souhaitez comparer des catégories à intervalles réguliers, tracez les valeurs y en fonction de positions d’indice telles que range(len(x)), puis utilisez les noms des catégories comme libellés des graduations. La séquence de données et les libellés doivent respecter le même ordre. Cette méthode remplace l’échelle de distance numérique par un ordre de catégories ; elle ne convient donc pas lorsque les écarts entre les mesures numériques sont significatifs.
Pour des libellés correspondant à des dates, utilisez des dates comme données x tracées et formatez les graduations de date au besoin. Attribuer des noms de mois à des coordonnées numériques sans rapport avec des dates ne transforme pas ces coordonnées en dates.
Régler la fréquence des graduations et améliorer la lisibilité des libellés
Sur un graphique de petite taille, transmettez des positions explicites à xticks() pour n’afficher que certaines graduations. Par exemple, plt.xticks(x[::2]) sélectionne une valeur sur deux dans une séquence ordonnée. Avec une échelle numérique régulière, un localisateur peut choisir un intervalle adapté lorsque la zone affichée change. Par exemple, importez MultipleLocator depuis matplotlib.ticker, puis appelez ax.xaxis.set_major_locator(MultipleLocator(2)) pour demander des graduations principales tous les deux unités. Choisissez des positions explicites lorsque les libellés désignent des catégories, et un localisateur lorsque l’axe est numérique.
Vous pouvez incliner les libellés longs avec plt.xticks(rotation=35, ha='right') ; ha définit leur alignement horizontal. Si les libellés inclinés se chevauchent encore, agrandissez la figure ou réduisez le nombre de graduations. tight_layout() peut dégager de l’espace autour des axes, mais ne détermine pas quelles graduations sont pertinentes.
L’exemple ci-dessus utilise set_xticks sur des axes individuels pour la plupart des graphiques, et xticks sur l’axe courant pour personnaliser les libellés. Avec l’approche orientée objet, ax.set_xticks(positions, labels) associe l’opération à un axe précis. Avec pyplot, sélectionnez d’abord l’axe voulu si la figure contient plusieurs graphiques.
FAQ : définir les valeurs de l’axe des x
Peut-on définir les positions et les libellés en un seul appel ? Oui. Transmettez les deux séquences à plt.xticks(positions, labels) ou utilisez ax.set_xticks(positions, labels). Chaque libellé correspond, par son indice, à la position associée.
Comment afficher moins de graduations ? Fournissez une liste plus courte de positions, ou utilisez un localisateur pour des graduations numériques régulièrement espacées. La fréquence des graduations est indépendante du nombre de points de données tracés.
Peut-on afficher des catégories textuelles sur l’axe des x ? Oui. Tracez directement les valeurs de catégorie, comme dans le graphique en barres, ou tracez des positions d’indice numériques et attribuez les noms des catégories comme libellés. Cette deuxième méthode est utile si vous avez besoin d’un ordre précis des catégories ou d’un espacement régulier.
Que faire si les libellés se chevauchent ? Affichez moins de libellés, inclinez-les, alignez le texte incliné à droite ou élargissez la figure. Ces réglages concernent les libellés des graduations ; ils ne modifient pas les valeurs tracées.