Attention : A moins que les ticklabels ne soient déjà définis comme une chaîne de caractères (comme c'est généralement le cas dans un boxplot par exemple), cela ne fonctionnera pas avec une version de matplotlib plus récente que 1.1.0
. Si vous travaillez à partir du master github actuel, cela ne fonctionnera pas. Je ne suis pas encore sûr de la nature du problème... Il peut s'agir d'un changement involontaire, ou non...
Normalement, vous devriez faire quelque chose de ce genre :
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# We need to draw the canvas, otherwise the labels won't be positioned and
# won't have values yet.
fig.canvas.draw()
labels = [item.get_text() for item in ax.get_xticklabels()]
labels[1] = 'Testing'
ax.set_xticklabels(labels)
plt.show()
Pour comprendre la raison pour laquelle vous devez sauter à travers tant de cerceaux, vous devez comprendre un peu plus comment matplotlib est structuré.
Matplotlib évite délibérément de positionner "statiquement" les ticks, etc, à moins qu'on ne le lui demande explicitement. L'hypothèse est que vous voudrez interagir avec le tracé, et donc que les limites du tracé, des ticks, des ticklabels, etc. changeront dynamiquement.
Par conséquent, vous ne pouvez pas simplement définir le texte d'une étiquette de coche donnée. Par défaut, il est redéfini par le localisateur et le formateur de l'axe à chaque fois que le tracé est dessiné.
Toutefois, si les localisateurs et les formateurs sont statiques ( FixedLocator
y FixedFormatter
respectivement), les étiquettes restent inchangées.
C'est ce que set_*ticklabels
o ax.*axis.set_ticklabels
ne.
J'espère que cela explique un peu mieux pourquoi la modification d'une étiquette de coche individuelle est un peu compliquée.
Souvent, ce que vous voulez faire, c'est simplement annoter une certaine position. Dans ce cas, consultez annotate
au lieu de cela.