Réduire les marges gauche et droite en matplotlib parcelle
J'ai du mal à faire face à ma tracer les marges de matplotlib. J'ai utilisé le code ci-dessous pour produire mon tableau:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Cependant, je reçois une sortie figure avec beaucoup d'espace blanc sur les deux côtés de la parcelle. J'ai cherché sur google et de lire le matplotlib de la documentation, mais je n'arrive pas à trouver comment réduire ce.
- Le problème est la quantité de blanc dans l'
extent
de laimshow
la figure, ou le montant de la frontière, les espaces dans la résultante png, autour de la figure, généré parsavefig
? - Je pense que les deux - il semble y avoir beaucoup d'espace à la fois à la fenêtre de visualisation et dans le format PNG. Toutefois, il importe de sortie est le fichier png produite par
savefig
- c'est ce que j'aimerais. - Je viens de recadrage dans GIMP par la suite. :/
Vous devez vous connecter pour publier un commentaire.
Un moyen pour ce faire est la
bbox_inches='tight'
kwarg àplt.savefig
.E. g.
Une autre façon est d'utiliser des
fig.tight_layout()
fig.savefig()
trop. (plt.savefig()
ne fonctionnera pas dans ce cas.)fig.tight_layout()
. Cette fonction n'existait pas lors de cette réponse a été écrit à l'origine, sinon je serais mentionner de façon plus évidente.fig = plt.gcf()
import matplotlib.pyplot as plt import numpy as np data = np.arange(3000).reshape((100,30)) plt.imshow(data) plt.axis('off') plt.tight_layout() plt.savefig('test.png', bbox_inches='tight', pad_inches = 0)
bbox_inches='tight'
,fig.tight_layout()
niplt.autoscale()
a fonctionné pour moi avec matplotlib version 2.0.1 + python 2.7.13. Ce qui a fonctionné pour moi, c'est terrible codé en dur solution de contournementplt.xlim([min, max])
. Source: stackoverflow.com/questions/20214497/...Vous pouvez régler l'espacement autour de matplotlib les chiffres en utilisant les subplots_adjust() fonction:
Cela fonctionne pour les deux la figure sur l'écran et l'enregistrer dans un fichier, et c'est le droit de la fonction à appeler, même si vous n'avez pas plusieurs parcelles d'une figure.
Les chiffres sont une fraction de la figure dimensions, et devra être ajusté pour permettre la figure étiquettes.
GridSpec
objets en appelant leupdate
méthode (voir la section stackoverflow.com/a/20058199/1030876).Tous vous avez besoin est
avant votre sortie.
En plus de la coupe de la marges de, ce aussi étroitement groupes de l'espace entre toutes les sous-intrigues:
Suffit d'utiliser
ax = fig.add_axes([left, bottom, width, height])
si vous souhaitez un contrôle précis de la figure de mise en page. par exemple.
savefig
fonction est élégant, cependant la valeur négative pourpad_inches
n'est pas forcément nécessaire dans tous les cas.Le problème avec matplotlibs subplots_adjust est que les valeurs que vous saisissez sont par rapport à x et y figsize de la figure. Cet exemple est pour corriger figuresizing pour l'impression d'un document pdf:
Pour cela, j'ai recalculer l'espacement relatif à l'absolu des valeurs comme ceci:
pour une figure de figure.xsize' pouces x de dimension et de forme.ysize' pouces y-dimension. Ainsi, l'ensemble de la figure a une marge de gauche de 5 mm, en bas de la marge de 4 mm, 1 mm et haut de 3 mm dans les étiquettes sont placées. La conversion de (x/25.4) est fait parce que j'avais besoin de convertir mm pouces.
Noter que la pure taille du graphique de x sera "la figure.xsize - marge de gauche - marge de droite" et la pure taille du graphique de y aura figure".ysize - la marge du bas - haut de la marge" en pouces
Autres sniplets (pas sûr de ceux-là, je voulais juste donner à l'autre, les paramètres)
et
xsize
etysize
de. J'utilise ces propriétés et j'aiAttributeError: 'Figure' object has no attribute 'xsize'
inspiré par Sammys réponse ci-dessus:
Où figsize est le n-uplet que vous avez utilisé dans
fig = pyplot.figure(figsize=...)
Pour moi, les réponses ci-dessus ne fonctionne pas avec
matplotlib.__version__ = 1.4.3
sur Win7. Donc, si nous nous intéressons uniquement à l'image elle-même (c'est à dire, si nous n'avons pas besoin d'annotations, de l'axe, les tiques, titre, ylabel etc), alors il est préférable de simplement enregistrer le tableau numpy comme image à la place desavefig
.Également, à l'aide d'opencv fonctions de dessin (cv2.ligne, cv2.les polylignes), nous pouvons faire quelques dessins directement sur le tableau numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html