Pourquoi mon xlabel coupé dans mon matplotlib intrigue?

je trace un ensemble de données en utilisant matplotlib où j'ai un xlabel qui est assez" grand " (c'est une formule rendue en TeX qui contient une fraction et qui a donc l'équivalent en hauteur de quelques lignes de texte).

dans tous les cas, le bas de la formule est toujours coupé quand je dessine les chiffres. Changer la taille de la figure ne semble pas aider cela, et je n'ai pas été en mesure de comprendre comment déplacer l'axe x "vers le haut" pour faire de la place pour le xlabel. Quelque comme cela serait une solution temporaire raisonnable, mais ce serait bien d'avoir un moyen de faire matplotlib reconnaître automatiquement que l'étiquette est coupée et redimensionner en conséquence.

voici un exemple de ce que je veux dire:

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$lnleft(frac{x_a-x_b}{x_a-x_c}right)$')
plt.xlabel(r'$lnleft(frac{x_a-x_d}{x_a-x_e}right)$')
plt.show()

alors que vous pouvez voir l'ylabel entier, le xlabel est coupé au fond.

dans le cas où il s'agit d'un problème propre à la machine, Je l'exécute sur OSX 10.6.8 avec matplotlib 1.0.0

179
demandé sur Hooked 2011-07-21 13:37:24

5 réponses

Utiliser:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)

pour faire place à l'étiquette.

Edit:

depuis que j'ai donné la réponse, matplotlib a ajouté la fonction tight_layout() . Je suggère donc de l'utiliser:

plt.tight_layout()

devrait faire de la place pour le xlabel.

260
répondu tillsten 2016-09-29 07:26:00

Une option facile est de configurer matplotlib pour ajuster automatiquement la taille de la parcelle. Il fonctionne parfaitement pour moi et je ne sais pas pourquoi il n'est pas activé par défaut.

Méthode 1

mettez ceci dans votre fichier matplotlibrc

figure.autolayout : True

voir ici pour plus d'informations sur la personnalisation du fichier matplotlibrc: http://matplotlib.org/users/customizing.html

Méthode 2

"

mise à Jour de la rcParams en cours d'exécution, comme ce

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

l'avantage d'utiliser cette approche est que votre code produira les mêmes graphiques sur des machines configurées différemment.

100
répondu Amit Moscovich 2013-06-30 13:28:48

vous pouvez également définir le rembourrage personnalisé par défaut dans votre $HOME/.matplotlib/matplotlib_rc comme suit. Dans l'exemple ci-dessous, j'ai modifié à la fois le rembourrage inférieur et le rembourrage extérieur:

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...
5
répondu Мати Тернер 2012-11-15 00:36:04

mettre plot.tight_layout() après tous les changements sur le graphique, juste avant show() ou savefig() résoudra le problème.

1
répondu Armin Okić 2018-09-13 14:29:25

dans le cas où vous voulez le stocker dans un fichier, vous le résolvez en utilisant bbox_inches="tight" argument:

plt.savefig('myfile.png', bbox_inches = "tight")
0
répondu Guido 2018-10-01 08:57:45