Dans une figure matplotlib, comment puis-je réduire la taille de la police pour les étiquettes de tick en utilisant ax1.set_xticklabels()
plus petite?
De plus, comment peut-on le faire pivoter d’horizontale à verticale?
Veuillez noter que les versions les plus récentes de MPL ont un raccourci pour cette tâche. Un autre exemple est donné dans l’autre réponse à cette question: https://stackoverflow.com/a/11386056/42346
Le code ci-dessous est à des fins d'illustration et ne peut pas nécessairement être 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 __== '__main__':
xticklabels_example()
Il y a un moyen plus simple en fait. Je viens de trouver:
import matplotlib.pyplot as plt
# We prepare the plot
fig = plt.figure(1)
# We define a fake subplot that is in fact only the plot.
ax = fig.add_subplot(111)
# 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 fait que répondre à la taille de label
une partie de votre question.
Pour spécifier 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
Dans les versions actuelles de Matplotlib, vous pouvez utiliser axis.set_xticklabels(labels, fontsize='small')
.
plt.tick_params(axis='both', which='minor', labelsize=12)
Une autre alternative
J'ai deux parcelles côte à côte et je voudrais ajuster les étiquettes de ticks séparément.
Les solutions ci-dessus étaient proches, mais elles ne fonctionnaient pas pour moi. J'ai trouvé ma solution à partir de ce matplotlib page .
ax.xaxis.set_tick_params(labelsize=20)
Cela a fait le tour et était droit au but. Dans mon cas d’utilisation, c’était l’intrigue de droite qui devait être ajustée. Depuis que je créais de nouveaux libellés de ticks, j’ai pu ajuster la police de caractères de la même manière que et définir les libellés.
c'est à dire
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
donc j'ai utilisé pour la bonne parcelle,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Un minnor subtilement ... je sais ... mais j'espère que cela aidera quelqu'un :)
Points bonus si quelqu'un sait comment ajuster la taille de la police de l'étiquette d'ordre de grandeur.
Vous pouvez également modifier les paramètres d'affichage des étiquettes comme fontsize 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!
Ce qui suit a fonctionné pour moi:
ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)
L'avantage de ce qui précède est que vous n'avez pas besoin de fournir la array
de labels
et de travailler avec les données de la axes
.