web-dev-qa-db-fra.com

Comment modifiez-vous la taille des figures dessinées avec matplotlib?

Comment modifiez-vous la taille de la figure dessinée avec matplotlib?

1602
tatwright

figure vous indique la signature de l'appelant:

from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

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

908
Jouni K. Seppänen

Si vous avez déjà créé la figure, vous pouvez le faire rapidement:

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

Pour propager le changement de taille dans une fenêtre graphique existante, ajoutez forward=True

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

Remarque relative à la dépréciation:
Conformément au guide officiel de Matplotlib , l’utilisation du module pylab n’est plus recommandée. Pensez à utiliser le module matplotlib.pyplot à la place, comme décrit par cette autre réponse .

Ce qui suit semble fonctionner:

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

Cela fait la largeur de la figure 5 pouces et sa hauteur 10 pouces.

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

311
tatwright

Veuillez essayer un code simple comme suit:

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.

226
iPAS

UTILISER plt.rcParams

Il existe également cette solution de contournement au cas où vous souhaiteriez modifier la taille sans utiliser l'environnement figure. Ainsi, si vous utilisez plt.plot() par exemple, vous pouvez définir un tuple avec une largeur et une hauteur.

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)

Ceci est très utile lorsque vous tracez un tracé en ligne (par exemple avec IPython Notebook). Comme @asamaier l’a remarqué, il est préférable de ne pas placer cette déclaration dans la même cellule que la déclaration imports.

Conversion en cm

Le figsize Tuple accepte les pouces, donc si vous voulez le régler en centimètres, vous devez les diviser par 2,54, regardez cette question .

221
G M

Le premier lien dans Google pour 'matplotlib figure size' est AdjustingImageSize ( cache Google de la page ).

Voici un script de test de la page ci-dessus. Il crée test[1-3].png fichiers de différentes tailles 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 la sortie réelle diffèrent.

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

69
jfs

Si vous cherchez un moyen de changer la taille de la figure en Pandas, vous pouvez le faire, par exemple:

df['some_column'].plot(figsize=(10, 5))

df est un Pandas dataframe. Si vous souhaitez modifier les paramètres par défaut, vous pouvez procéder comme suit:

import matplotlib

matplotlib.rc('figure', figsize=(10, 5))
57
Kris

Vous pouvez simplement utiliser (à partir de matplotlib.figure.Figure ):

fig.set_size_inches(width,height)

À partir de Matplotlib 2.0.0, les modifications apportées à votre canevas seront immédiatement visibles, en tant que mot clé forwardla valeur par défaut est True .

Si vous voulez juste changer la largeur ou la hauteur au lieu des deux, vous pouvez utiliser

fig.set_figwidth(val) ou fig.set_figheight(val)

Celles-ci mettront immédiatement à jour votre toile, mais uniquement dans Matplotlib 2.2.0 et plus récent.

Pour les anciennes versions

Vous devez spécifier explicitement forward=True afin de mettre à jour votre toile dans des versions plus anciennes que celles spécifiées ci-dessus. Notez que les fonctions set_figwidth et set_figheight ne prennent pas en charge le paramètre forward dans les versions antérieures à Matplotlib 1.5.0.

37
River

Essayez de commenter la ligne fig = ...

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.Rand(N)
y = np.random.Rand(N)
area = np.pi * (15 * np.random.Rand(N))**2

fig = plt.figure(figsize=(18, 18))
plt.scatter(x, y, s=area, alpha=0.5)
plt.show()
27
Renaud

Pour augmenter la taille de votre figure N fois, vous devez l'insérer juste avant votre pl.show ():

N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )

Cela fonctionne également bien avec le cahier ipython.

15
psihodelia
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()

Vous pouvez aussi utiliser:

fig, ax = plt.subplots(figsize=(20, 10))
12
amalik2205

Cela fonctionne bien pour moi:

from matplotlib import pyplot as plt
F = gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True)#Set forward to True to resize window along with plot in figure.
plt.show() #or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array

Cela pourrait aussi aider: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html

9
Blairg23

Puisque Matplotlib n'est pas capable d'utiliser le système métrique de manière native, si vous souhaitez spécifier la taille de votre figure dans une unité de longueur raisonnable telle que les centimètres, vous pouvez effectuer les opérations suivantes (code de - gns-ank ):

def cm2inch(*tupl):
    inch = 2.54
    if isinstance(tupl[0], Tuple):
        return Tuple(i/inch for i in tupl[0])
    else:
        return Tuple(i/inch for i in tupl)

Ensuite, vous pouvez utiliser:

plt.figure(figsize=cm2inch(21, 29.7))
8
Franck Dernoncourt

Ceci redimensionne la figure immédiatement même après que celle-ci ait été dessinée (au moins avec Qt4Agg/TkAgg - mais pas MacOSX - avec matplotlib 1.4.0):

matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)
7
wilywampa

Une autre option, utiliser la fonction rc () dans matplotlib (l'unité est en pouces)

import matplotlib
matplotlib.rc('figure', figsize=[10,5])
3
Student222