88 votes

Comment ajouter de l'espace entre les ticklabels et les axes dans matplotlib ?

J'ai réussi à augmenter la police de mes ticklabels, mais ils sont maintenant trop proches de l'axe. J'aimerais ajouter un peu d'espace entre les étiquettes et l'axe.

125voto

wronk Points 1131

Si vous ne voulez pas modifier l'espacement de manière globale (en modifiant vos rcParams), et que vous souhaitez une approche plus propre, essayez ceci :

ax.tick_params(axis='both', which='major', pad=15)

ou pour l'axe x seulement

ax.tick_params(axis='x', which='major', pad=15)

ou l'axe y

ax.tick_params(axis='y', which='major', pad=15)

43voto

abjennings Points 393

Il semble que matplotlib respecte ces paramètres comme rcParams :

pylab.rcParams['xtick.major.pad']='8'
pylab.rcParams['ytick.major.pad']='8'

Définissez ces avant vous créez des figures et tout devrait bien se passer.

J'ai regardé le code source et il ne semble pas y avoir d'autre moyen de les définir par programme. (tick.set_pad() semble essayer de faire la bonne chose, mais le padding semble être défini lorsque les Ticks sont construits et ne peut plus être modifié après cela).

24voto

tom10 Points 19886

Cela peut être fait en utilisant set_pad mais vous devez alors réinitialiser l'étiquette...

for tick in ax.get_xaxis().get_major_ticks():
    tick.set_pad(8.)
    tick.label1 = tick._get_text1()

3voto

Trenton_M Points 734
  • Comme pour beaucoup de questions canoniques, celle-ci n'est pas très spécifique et n'a pas d'exemple reproductible, donc voici un exemple pour les étiquettes et le titre des figures.
  • Les autres réponses sont excellentes pour axes mais il existe d'autres options pour un figure qui peuvent tous être positionnés en spécifiant l'option x= y y= paramètre.
  • Exemple de Étiquettes des figures : suptitle, supxlabel, supylabel

    from matplotlib.cbook import get_sample_data import matplotlib.pyplot as plt import numpy as np

    fig, axs = plt.subplots(3, 5, figsize=(8, 5), constrained_layout=True, sharex=True, sharey=True)

    fname = get_sample_data('percent_bachelors_degrees_women_usa.csv', asfileobj=False) gender_degree_data = np.genfromtxt(fname, delimiter=',', names=True)

    majors = ['Health Professions', 'Public Administration', 'Education', 'Psychology', 'Foreign Languages', 'English', 'Art and Performance', 'Biology', 'Agriculture', 'Business', 'Math and Statistics', 'Architecture', 'Physical Sciences', 'Computer Science', 'Engineering']

    for nn, ax in enumerate(axs.flat): ax.set_xlim(1969.5, 2011.1) column = majors[nn] column_recname = column.replace('\n', '').replace(' ', '_')

    line, = ax.plot('Year', column_rec_name, data=gender_degree_data, lw=2.5)
    ax.set_title(column, fontsize='small', loc='left', y=1.05)  # move the axes title
    ax.set_ylim([0, 100])
    ax.tick_params(axis='both', which='major', pad=15)  # move the tick labels
    ax.grid()

    fig.supxlabel('Year', y=-0.15) # with adjusted position fig.supylabel('Percent Degrees Awarded To Women', x=-0.05) # with adjusted position fig.suptitle('Majors', y=1.15) # with adjusted position

    plt.show()

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X