Modifier les tiques texte de l'étiquette
Je tiens à apporter quelques modifications à quelques étiquettes de graduation dans une parcelle.
Par exemple, si je fais:
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
la taille de la police et de l'orientation de l'étiquette de graduation est changé.
Toutefois, si vous essayez:
label.set_text('Foo')
l'étiquette de graduation est pas modifié. Aussi, si je fais:
print label.get_text()
rien n'est imprimé.
Voici quelques étrangeté. Quand j'ai essayé ceci:
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
Seulement des chaînes vides sont imprimés, mais l'intrigue contient les tiques étiquetés comme '0.0', '0.5', '1.0', '1.5', et '2.0'.
- Pouvez-vous fournir la parcelle que vous avez utilisé pour obtenir le label?
- Voir l'extrait ci-dessus
- Vous obtenez des étiquettes vierges parce que vous n'avez pas établi la toile encore. Si vous appelez
draw()
avant d'essayer d'imprimer les étiquettes, vous obtiendrez ce que vous attendez. La configuration des étiquettes de graduation est malheureusement un peu plus difficile (ce qui se passe est que la tique locator et formateur n'a pas été remis à zéro et il remplace les choses lorsque vousset_text
). Je vais ajouter un exemple un peu, si quelqu'un ne veut pas me battre pour elle. Je dois prendre le bus, à l'instant. - Super! Hâte de voir votre correction.
- Eh bien, il semble que j'ai parlé d'une touche trop tôt. Ce que j'avais à l'esprit fonctionne pour les versions plus anciennes de matplotlib, mais pas la dernière version. J'ai besoin de faire un peu plus de creuser. Ceci étant dit, cela ne devrait pas être aussi compliqué que c'est...
Vous devez vous connecter pour publier un commentaire.
Mise en garde: à Moins que le ticklabels sont déjà fixés à une chaîne de caractères (comme c'est généralement le cas par exemple d'une boîte à moustaches), cela ne fonctionnera pas avec n'importe quelle version de matplotlib plus récente que
1.1.0
. Si vous travaillez à partir de l'actuel github maître, cela ne fonctionne pas. Je ne suis pas sûr de ce que le problème est encore... C'est peut être une modification non intentionnelle, ou il peut ne pas être...Normalement, vous devriez faire quelque chose le long de ces lignes:
À comprendre la raison pour laquelle vous avez besoin de faire des pieds et des cerceaux, vous avez besoin de comprendre un peu plus sur la façon matplotlib est structuré.
Matplotlib évite délibérément de faire "statique" positionnement de tiques, etc, sauf si c'est explicitement dit. L'hypothèse est que vous aurez envie d'interagir avec l'intrigue, et donc les limites de la parcelle, les tiques, les ticklabels, etc sera de changer dynamiquement.
Par conséquent, vous ne pouvez pas définir le texte d'une étiquette de graduation. Par défaut, c'est re-définie par l'axe du Localisateur et Formateur à chaque fois que l'intrigue est tirée.
Toutefois, si les repères et les Formateurs sont configurés pour être statique (
FixedLocator
etFixedFormatter
, respectivement), alors les étiquettes de graduation rester le même.C'est ce que
set_*ticklabels
ouax.*axis.set_ticklabels
n'.J'espère que ça le rend un peu plus clairement pourquoi changer une personne tick label est un peu compliqué.
Souvent, ce que vous voulez vraiment faire, c'est juste annoter une certaine position. Dans ce cas, regardez dans
annotate
, à la place.Dans les versions plus récentes de
matplotlib
, si vous ne définissez pas les étiquettes de graduation avec un tas destr
valeurs, ils sont''
par défaut (et quand la parcelle est de dessiner les étiquettes sont tout simplement les tiques valeurs). Sachant que, pour obtenir votre sortie désirée aurait besoin de quelque chose comme ceci:et le résultat:
et maintenant, si vous cochez la
_xticklabels
, ils ne sont plus un tas de''
.Il travaille dans les versions à partir de
1.1.1rc1
à la version actuelle2.0
.set_xticklabels
avec un mixte de liste de chaînes de caractères et les tiques des objets.On peut aussi le faire avec pylab et xticks
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
Les axes de la classe a un set_yticklabels fonction vous permet de définir les étiquettes de graduation, comme suit:
Je travaille toujours sur les raisons de votre exemple ci-dessus n'a pas fonctionné.
Il a été un moment depuis que cette question a été posée. À compter d'aujourd'hui (
matplotlib 2.2.2
) et après un peu de lecture et d'essais, je pense que le meilleur/la bonne façon est la suivante:Matplotlib a un module nommé
ticker
que "contient les classes pour appuyer complètement configurable cochez la localisation et mise en forme". Pour modifier une tique spécifique de la parcelle, le suivant fonctionne pour moi:Mise en garde!
x
est la valeur de la tique etpos
est sa position relative dans l'ordre dans l'axe. Notez quepos
prend des valeurs de départ dans1
, pas dans0
comme d'habitude lors de l'indexation.Dans mon cas, j'ai essayé de formater le
y-axis
d'un histogramme avec des valeurs en pourcentage.mticker
a une autre classe nomméePercentFormatter
qui peuvent le faire facilement, sans la nécessité de définir une fonction distincte comme avant:Dans ce cas
xmax
est la valeur de données qui correspond à 100%. Les pourcentages sont calculés commex /xmax * 100
, c'est pourquoi nous fixonsxmax=1.0
. Aussi,decimals
est le nombre de décimales à placer après le point.Cela fonctionne:
Cela fonctionne aussi dans matplotlib 3:
Si vous ne travaillez pas avec
fig
etax
et que vous souhaitez modifier toutes les étiquettes (par exemple, pour la normalisation) vous pouvez le faire:que vous pouvez faire: