web-dev-qa-db-fra.com

Matplotlib rend les étiquettes de coutil plus petites

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?

243
Open the way

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()

enter image description here

105
bernie

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.

420
Autiwa

Pour spécifier la taille de la police et la rotation en même temps, essayez ceci:

plt.xticks(fontsize=14, rotation=90)
160
scottlittle

Alternativement, vous pouvez simplement faire:

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 
45
user2468932

Dans les versions actuelles de Matplotlib, vous pouvez utiliser axis.set_xticklabels(labels, fontsize='small').

23
Christoph
plt.tick_params(axis='both', which='minor', labelsize=12)
20
jingweimo

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.

enter image description here

17
Kyle Swanson

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()]
14
ATX_Bigfoot

Pour les polices plus petites, j'utilise

ax1.set_xticklabels(xticklabels, fontsize=7)

et il fonctionne!

14
Pengyao

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.

8
Cryptoman