tracé avec texte personnalisé pour les points de l'axe x

106

Je dessine un tracé en utilisant matplotlib et python comme l'exemple de code ci-dessous.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Comme c'est le code ci-dessus sur l'axe x, je vais voir les valeurs dessinées, 0.0, 0.5, 1.0, 1.5c'est-à-dire les mêmes valeurs de mes valeurs x de référence.

Est-il possible de mapper chaque point de x sur une chaîne différente? Par exemple, je veux que l'axe des x affiche les noms des mois (chaînes Jun, July,...) ou d'autres chaînes comme les noms de personnes ( "John", "Arnold", ...) ou l'heure de l'horloge ( "12:20", "12:21", "12:22", ..).

Savez-vous ce que je peux faire ou quelle fonction jeter un œil?
Pour mon objectif, cela pourrait-il être matplotlib.tickerutile?

user311906
la source

Réponses:

195

Vous pouvez définir manuellement xticks (et yticks) en utilisant pyplot.xticks :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()

unutbu
la source
44
rotationest aussi parfois utile:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe
4
Et comment disperser les éléments uniformément le long de l'axe des x? Disons que mon axe x a 1 million de points en interne et que je souhaite afficher uniquement John, Arnold, Mavis et Matt le long de l'axe uniformément répartis?
Steve K
@SirBenBenji: Utilisez l'indexation (par exemple x[idx]) pour sélectionner uniquement les données que vous souhaitez afficher.
unutbu
Je ne comprends pas pourquoi vous écrivez pylab, cette réponse est obsolète et fausse à mon avis.
Mario Krenn
1

Cela a fonctionné pour moi. Chaque mois sur l'axe X

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
Tajni
la source