[python] Réduire les marges gauche et droite dans le graphique matplotlib



Answers

Vous pouvez ajuster l'espacement autour des figures matplotlib en utilisant la fonction subplots_adjust ():

import matplotlib.pyplot as plt
plt.plot(whatever)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)

Cela fonctionnera à la fois pour la figure sur l'écran et enregistré dans un fichier, et c'est la bonne fonction à appeler même si vous n'avez pas plusieurs parcelles sur la même figure.

Les nombres sont des fractions des dimensions de la figure et devront être ajustés pour tenir compte des étiquettes de figures.

Question

J'ai du mal à gérer mes marges dans 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 un chiffre de sortie avec beaucoup d'espace blanc de chaque côté de l'intrigue. J'ai recherché google et lu la documentation de matplotlib, mais je ne peux pas sembler trouver comment réduire ceci.




Utilisez simplement "ax = fig.add_axes ([left, bottom, width, height])" si vous voulez un contrôle précis de la disposition de la figure. par exemple.

    left = 0.05
    bottom = 0.05
    width = 0.9
    height = 0.9
    ax = fig.add_axes([left, bottom, width, height])



Le problème avec matplotlibs subplots_adjust est que les valeurs que vous entrez sont relatives aux dimensions x et y de la figure. Cet exemple est pour une personnalisation correcte pour l'impression d'un pdf:

Pour cela, je recalcule l'espacement relatif en valeurs absolues comme ceci:

pyplot.subplots_adjust(left = (5/25.4)/figure.xsize, bottom = (4/25.4)/figure.ysize, right = 1 - (1/25.4)/figure.xsize, top = 1 - (3/25.4)/figure.ysize)

pour une figure de pouces 'figure.xsize' dans x-dimension et 'figure.ysize' pouces dans y-dimension. Ainsi la figure entière a une marge gauche de 5 mm, une marge inférieure de 4 mm, une droite de 1 mm et un sommet de 3 mm à l'intérieur des étiquettes sont placées. La conversion de (x / 25.4) est faite parce que j'avais besoin de convertir mm en pouces.

Notez que la taille pure du graphique de x sera "figure.xsize - marge gauche - marge de droite" et la taille de graphique pure de y sera "figure.ysize - marge inférieure - marge supérieure" en pouces

D'autres sniplets (pas sûr de ceux-ci, je voulais juste fournir les autres paramètres)

pyplot.figure(figsize = figureSize, dpi = None)

et

pyplot.savefig("outputname.eps", dpi = 100)



Pour moi, les réponses ci-dessus ne fonctionnaient pas avec matplotlib.__version__ = 1.4.3 sur Win7. Donc, si nous ne sommes intéressés que par l'image elle-même (si nous n'avons pas besoin d'annotations, d'axes, de graduations, de titres, d'ylabel, etc.), il vaut mieux sauvegarder simplement le tableau numpy comme image.

from pylab import *

ax = subplot(111)
ax.imshow(some_image_numpyarray)
imsave('test.tif', some_image_numpyarray)

# or, if the image came from tiff or png etc
RGBbuffer = ax.get_images()[0].get_array()
imsave('test.tif', RGBbuffer)

De plus, en utilisant les fonctions de dessin d'opencv (cv2.line, cv2.polylines), nous pouvons faire des dessins directement sur le tableau numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html






Related