Dans une figure matplotlib, comment puis-je réduire la taille de la police des étiquettes de graduation ax1.set_xticklabels()
?
De plus, comment peut-on le faire pivoter de l'horizontale à la verticale?
Dans une figure matplotlib, comment puis-je réduire la taille de la police des étiquettes de graduation ax1.set_xticklabels()
?
De plus, comment peut-on le faire pivoter de l'horizontale à la verticale?
Réponses:
Veuillez noter que les nouvelles versions de MPL ont un raccourci pour cette tâche. Un exemple est montré dans l'autre réponse à cette question: https://stackoverflow.com/a/11386056/42346
Le code ci-dessous est à titre indicatif et peut ne pas être nécessairement optimisé.
import matplotlib.pyplot as plt
import numpy as np
def xticklabels_example():
fig = plt.figure()
x = np.arange(20)
y1 = np.cos(x)
y2 = (x**2)
y3 = (x**3)
yn = (y1,y2,y3)
COLORS = ('b','g','k')
for i,y in enumerate(yn):
ax = fig.add_subplot(len(yn),1,i+1)
ax.plot(x, y, ls='solid', color=COLORS[i])
if i != len(yn) - 1:
# all but last
ax.set_xticklabels( () )
else:
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(14)
# specify integer or one of preset strings, e.g.
#tick.label.set_fontsize('x-small')
tick.label.set_rotation('vertical')
fig.suptitle('Matplotlib xticklabels Example')
plt.show()
if __name__ == '__main__':
xticklabels_example()
plt.setp
. (Aussi, jetez un œil à ax.tick_params
) Par exemple, vous pouvez simplement le faire plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. De plus, les objets axes ont une ax.is_last_row()
méthode qui peut être pratique dans des cas comme votre exemple. Au lieu de cela if i != len...
, vous pouvez le faire if not ax.is_last_row()
. (Pourquoi c'est une méthode, je n'en ai aucune idée ... Matplotlib déteste les propriétés, apparemment!)
is_last_row()
, merci! J'ai utilisé plt.setp
dans le passé, et je n'étais pas nécessairement sûr que cela représentait une manière plus canonique de personnaliser les étiquettes de tick. Vous avez levé ce doute, merci. Plus largement: vos réponses, notamment dans le matplotlib
tag, me laissent souvent en admiration. Continuez ce bon travail.
plt.setp
est un "matlab-ism", et une boucle explicite est probablement beaucoup plus pythonique. Être un matlab converti, moi-même, me setp
semble naturel, mais pour chacun d'eux. L'un ou l'autre est tout à fait lisible, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
pas êtreget_major_ticks
Il existe en fait un moyen plus simple. Je viens de trouver:
import matplotlib.pyplot as plt
# We prepare the plot
fig, ax = plt.subplots()
# We change the fontsize of minor ticks label
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)
Cela ne répond cependant qu'à la taille d'une label
partie de votre question.
axis = 'x'
ou axis = 'y'
pour modifier un seul des axes
Pour spécifier à la fois la taille de la police et la rotation en même temps, essayez ceci:
plt.xticks(fontsize=14, rotation=90)
Alternativement, vous pouvez simplement faire:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
Une autre alternative
J'ai deux tracés côte à côte et j'aimerais ajuster les étiquettes des graduations séparément.
Les solutions ci-dessus étaient proches mais elles ne fonctionnaient pas pour moi. J'ai trouvé ma solution sur cette page matplotlib .
ax.xaxis.set_tick_params(labelsize=20)
Cela a fait l'affaire et était direct. Pour mon cas d'utilisation, c'était l'intrigue à droite qui devait être ajustée. Pour l'intrigue de gauche depuis que je créais de nouvelles étiquettes de graduation, j'ai pu ajuster la police en suivant le même processus que la définition des étiquettes.
c'est à dire
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
j'ai donc utilisé pour la bonne intrigue,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Une subtilité mineure ... Je sais ... mais j'espère que cela aide quelqu'un :)
Points bonus si quelqu'un sait comment ajuster la taille de police de l'étiquette d'ordre de grandeur.
Vous pouvez également modifier les paramètres d'affichage des étiquettes comme la taille de la police avec une ligne comme celle-ci:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
Pour les polices plus petites, j'utilise
ax1.set_xticklabels(xticklabels, fontsize=7)
et il fonctionne!