Je trace un ensemble 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 a donc l'équivalent en hauteur de quelques lignes de texte).
Dans tous les cas, le bas de la formule est toujours coupé lorsque 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 chose comme ça serait une solution temporaire raisonnable, mais ce qui serait bien serait d'avoir un moyen pour que matplotlib reconnaisse automatiquement que l'étiquette est coupée et redimensionnée 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()
tandis que vous pouvez voir l'intégralité du ylabel, le xlabel est coupé en bas.
Dans le cas où il s'agit d'un problème spécifique à la machine, je l'exécute sur OSX 10.6.8 avec matplotlib 1.0.0
la source
plt.savefig("test.png",bbox_inches='tight')
: stackoverflow.com/questions/21288062/…Réponses:
Utilisation:
pour faire de la place au label.
Éditer:
Depuis que j'ai donné la réponse,
matplotlib
a ajouté latight_layout()
fonction. Je suggère donc de l'utiliser:devrait faire de la place pour le xlabel.
la source
gcf().subplots_adjust
plutôt queplt.subplots_adjust
? Y a-t-il une différence?gcf
etgca
? Vous avez négligé d'expliquer!tight_layout()
j'ai corrigé la coupure des xlabels, cela a malheureusement causé la coupure de mon ylabel (ce qui n'était pas le cas auparavant). Cependant, le premier remède (subplots_adjust(bottom=0.25)
) a bien fonctionné. Merci.gcf()
etgca()
sont respectivement "get current figure" et "get current axes".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
Réglez cela dans votre fichier matplotlibrc
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
L'avantage d'utiliser cette approche est que votre code produira les mêmes graphiques sur des machines configurées différemment.
la source
Dans le cas où vous souhaitez le stocker dans un fichier, vous le résolvez en utilisant l'
bbox_inches="tight"
argument:la source
Mettre
plot.tight_layout()
après toutes les modifications sur le graphique, juste avantshow()
ousavefig()
résoudra le problème.la source
plt.autoscale()
travaillé pour moi.la source
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é le rembourrage inférieur et gauche prêt à l'emploi:la source