3234 votes

Comment modifier la taille des figures dessinées avec Matplotlib ?

Comment modifier la taille d'une figure dessinée avec Matplotlib ?

1907voto

Jouni K. Seppänen Points 15129

figure vous indique la signature de l'appel :

from matplotlib.pyplot import figure

figure(figsize=(8, 6), dpi=80)

figure(figsize=(1,1)) créerait une image de type pouce par pouce, soit 80 par 80 pixels, à moins que vous ne donniez également un argument dpi différent.

128 votes

Si vous avez déjà créé la figure, disons 'figure 1' (c'est la figure par défaut lorsque vous utilisez pyplot), vous pouvez utiliser figure(num=1, figsize=(8, 6), ...) pour modifier sa taille, etc. Si vous utilisez pyplot/pylab et show() pour créer une fenêtre popup, vous devez appeler figure(num=1,...) avant vous tracez quoi que ce soit - pyplot/pylab crée une figure dès que vous dessinez quelque chose, et la taille de la popup semble être fixée à ce moment-là.

7 votes

Cela signifie-t-il que si vous définissez le DPI à 1, alors figsize devient une unité de pixel au lieu d'une unité de pouce ? Cela serait plus utile lors de l'utilisation de matplotlib sur des interfaces web et GUI.

3 votes

Avec figsize(1,1), vous aurez un rapport de 1:1 dans l'image ? parce que tous mes camemberts sont ovales, et la seule façon que j'ai trouvée pour les rendre ronds était d'utiliser plot.axis("equals"). ils auraient le même effet ou ils se comportent différemment ?

1174voto

Pete Points 2216

Si vous avez déjà créé la figure, vous pouvez utiliser figure.set_size_inches pour ajuster la taille de la figure :

fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)

Pour propager le changement de taille à une fenêtre GUI existante, ajoutez forward=True :

fig.set_size_inches(18.5, 10.5, forward=True)

En outre, comme Erik Shilts mentionné dans les commentaires vous pouvez également utiliser figure.set_dpi pour "[préciser] la résolution de la figure en points par pouce".

fig.set_dpi(100)

5 votes

J'ai résolu un problème avec imshow Maintenant j'utilise ce code juste après avoir éliminé l'espace autour de la zone de traçage avec plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0) .

16 votes

De même, vous pouvez exécuter fig.set_dpi(100) .

2 votes

Je l'utilise sur OS X sous ipython 3.7, matplotlib 3.0.3. Je suis en mesure d'ajuster la taille de la figure, mais la fenêtre ne se redimensionne pas (le canevas de la figure s'ajuste, mais la fenêtre ne s'agrandit ou ne se réduit pas pour s'adapter au canevas). L'argument du mot-clé forward=True ne semble pas avoir l'effet escompté sur cette plate-forme.

441voto

tatwright Points 1739

Note de dépréciation :
Conformément à la Guide officiel de Matplotlib l'utilisation de la pylab n'est plus recommandé. Veuillez envisager d'utiliser le module matplotlib.pyplot à la place, comme décrit par cette autre réponse .

La méthode suivante semble fonctionner :

from pylab import rcParams
rcParams['figure.figsize'] = 5, 10

Ce qui fait que la figure a une largeur de 5 pouces et une hauteur de 10 pouces. pouces .

La classe Figure l'utilise ensuite comme valeur par défaut pour l'un de ses arguments.

3 votes

Cela fonctionne aussi très bien en haut d'un notebook iPython, qui (avec --pylab=inline) a rcParams déjà importé au niveau supérieur.

4 votes

Cela n'a pas fonctionné sur ma machine Windows avec une interface OO vers pyplot et un backend Qt. fig.set_size_inches(18.5, 10.5, forward=True) travaillé.

3 votes

Cette réponse est actuellement discutée sur Méta

392voto

iPAS Points 1

Veuillez essayer un code simple comme le suivant :

from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()

Vous devez définir la taille de la figure avant de tracer.

20 votes

Cette réponse me dit qu'il s'agit d'une m atplotlib.pyplot.figure que les autres ne disent pas aussi clairement. Je continue à essayer des choses comme matplotlib.figure y matplotlib.figure.Figure

0 votes

"_tkinter.TclError : pas assez de mémoire libre pour le tampon d'image"

9 votes

plt.figure(figsize=(1,1)) est le mouvement essentiel. Merci.

90voto

J.F. Sebastian Points 102961

Le premier lien dans Google pour 'matplotlib figure size' es Ajustement de la taille de l'image ( Cache Google de la page ).

Voici un test script de la page ci-dessus. Il crée test[1-3].png des fichiers de tailles différentes de la même image :

#!/usr/bin/env python
"""
This is a small demo file that helps teach how to adjust figure sizes
for matplotlib

"""

import matplotlib
print "using MPL version:", matplotlib.__version__
matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end.

import pylab
import numpy as np

# Generate and plot some simple data:
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)

pylab.plot(x,y)
F = pylab.gcf()

# Now check everything with the defaults:
DPI = F.get_dpi()
print "DPI:", DPI
DefaultSize = F.get_size_inches()
print "Default size in Inches", DefaultSize
print "Which should result in a %i x %i Image"%(DPI*DefaultSize[0], DPI*DefaultSize[1])
# the default is 100dpi for savefig:
F.savefig("test1.png")
# this gives me a 797 x 566 pixel image, which is about 100 DPI

# Now make the image twice as big, while keeping the fonts and all the
# same size
F.set_size_inches( (DefaultSize[0]*2, DefaultSize[1]*2) )
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test2.png")
# this results in a 1595x1132 image

# Now make the image twice as big, making all the fonts and lines
# bigger too.

F.set_size_inches( DefaultSize )# resetthe size
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test3.png", dpi = (200)) # change the dpi
# this also results in a 1595x1132 image, but the fonts are larger.

Sortie :

using MPL version: 0.98.1
DPI: 80
Default size in Inches [ 8.  6.]
Which should result in a 640 x 480 Image
Size in Inches [ 16.  12.]
Size in Inches [ 16.  12.]

Deux notes :

  1. Les commentaires du module et le résultat réel diffèrent.

  2. Cette réponse permet de combiner facilement les trois images dans un seul fichier image pour voir la différence de taille.

11 votes

Chaque fois que j'essaie de me rappeler comment faire, je me retrouve dans ce post. Voici donc le code que je recherche normalement : fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X