Je trace un jeu de données en utilisant matplotlib
où j'ai un xlabel qui est assez "grand" (c'est une formule rendue dans TeX qui contient une fraction et qui a donc la hauteur équivalente à quelques lignes de texte).
Dans tous les cas, le fond de la formule est toujours coupé lorsque je dessine les chiffres. Changer la taille de la figure ne semble pas aider, et je n'ai pas été capable de comprendre comment déplacer l'axe des x "en haut" pour faire de la place pour le xlabel. Une solution de ce genre constituerait une solution temporaire raisonnable, mais ce qui serait bien à Nice serait de disposer d’un moyen de faire en sorte que matplotlib reconnaisse automatiquement que l’étiquette est coupée et redimensionne en conséquence.
Voici un exemple de ce que je veux dire:
import matplotlib.pyplot as plt
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()
alors que vous pouvez voir le ylabel entier, le xlabel est coupé en bas.
S'il s'agit d'un problème spécifique à une machine, je l'utilise sous OSX 10.6.8 avec matplotlib 1.0.0.
Utilisation:
import matplotlib.pyplot as plt
plt.gcf().subplots_adjust(bottom=0.15)
faire de la place pour l'étiquette.
Modifier:
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.
Une option simple consiste à configurer matplotlib pour ajuster automatiquement la taille du tracé. Cela fonctionne parfaitement pour moi et je ne sais pas pourquoi il n'est pas activé par défaut.
Méthode 1
Définissez 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
Mettez à jour les rcParams pendant l'exécution comme ceci
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.
Si vous souhaitez le stocker dans un fichier, résolvez-le à l'aide de l'argument bbox_inches="tight"
:
plt.savefig('myfile.png', bbox_inches = "tight")
Vous pouvez également définir le remplissage personnalisé comme valeurs par défaut dans votre $HOME/.matplotlib/matplotlib_rc
comme suit. Dans l'exemple ci-dessous, j'ai modifié à la fois les marges internes inférieure et gauche:
# 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
...
plt.autoscale()
a travaillé pour moi.
Mettre plot.tight_layout()
après tous les changements sur le graphique, juste avant show()
ou savefig()
résoudra le problème.