Comment changez-vous la taille de la figure dessinée avec matplotlib?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
pour éviter la confusion une fois pour toutes.
Comment changez-vous la taille de la figure dessinée avec matplotlib?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
pour éviter la confusion une fois pour toutes.
Réponses:
la figure vous indique la signature de l'appel:
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, qui serait de 80 par 80 pixels, sauf si vous donnez également un argument dpi différent.
show()
pour créer une fenêtre contextuelle, vous devez appeler figure(num=1,...)
avant de tracer quoi que ce soit - pyplot / pylab crée une figure dès que vous dessinez quelque chose, et la taille de la fenêtre contextuelle apparaît à fixer à ce stade.
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 GUI existante, ajoutez forward=True
fig.set_size_inches(18.5, 10.5, forward=True)
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)
.
fig.set_dpi(100)
.
Remarque sur la dépréciation:
selon le guide officiel de Matplotlib , l'utilisation dupylab
module n'est plus recommandée. Veuillez envisager d'utiliser lematplotlib.pyplot
module à la place, comme décrit par cette autre réponse .
Les éléments suivants semblent 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 l'utilise ensuite comme valeur par défaut pour l'un de ses arguments.
fig.set_size_inches(18.5, 10.5, forward=True)
travaillé.
Il existe également cette solution de contournement si vous souhaitez modifier la taille sans utiliser l'environnement de la figure. Donc, si vous utilisez plt.plot()
par exemple, vous pouvez définir un tuple avec largeur et hauteur.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Ceci est très utile lorsque vous tracez 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 des déclarations d'importation.
Le figsize
tuple accepte les pouces, donc si vous voulez le définir en centimètres, vous devez les diviser par 2,54. Consultez cette question .
plt.rcParams["figure.figsize"] = (20,3)
dans une cellule supplémentaire. Lorsque je l'appelle dans la même cellule que l'instruction import, elle est ignorée.
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.
atplotlib.pyplot.figure
, ce que les autres ne disent pas aussi clairement. Je continue d'essayer des choses comme matplotlib.figure
etmatplotlib.figure.Figure
plt.figure(figsize=(1,1))
est le mouvement crucial. Je vous remercie.
Si vous cherchez un moyen de modifier la taille de la figure dans Pandas , vous pouvez par exemple:
df['some_column'].plot(figsize=(10, 5))
où df
est une trame de données Pandas. Ou, pour utiliser une figure ou des axes existants
fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)
Si vous souhaitez modifier les paramètres par défaut, vous pouvez procéder comme suit:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
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 des 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.
Production:
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:
Les commentaires du module et la sortie réelle diffèrent.
Cette réponse permet de combiner facilement les trois images dans un fichier image pour voir la différence de taille.
fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
Vous pouvez simplement utiliser (depuis 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, car le forward
mot - clé par défaut estTrue
.
Si vous souhaitez simplement modifier la largeur ou la hauteur au lieu des deux, vous pouvez utiliser
fig.set_figwidth(val)
ou fig.set_figheight(val)
Ceux-ci mettront également à jour immédiatement votre toile, mais uniquement dans Matplotlib 2.2.0 et plus récent.
Vous devez spécifier forward=True
explicitement afin de mettre à jour en direct votre canevas dans des versions antérieures à ce qui est spécifié ci-dessus. Notez que les fonctions set_figwidth
et set_figheight
ne prennent pas en charge le forward
paramètre dans les versions antérieures à Matplotlib 1.5.0.
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))
Essayez de commenter la fig = ...
ligne
%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()
Cela fonctionne bien pour moi:
from matplotlib import pyplot as plt
F = plt.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 également aider: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Pour augmenter la taille de votre chiffre 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) )
Il fonctionne également bien avec le bloc-notes ipython.
Étant donné que Matplotlib ne peut pas utiliser le système métrique en mode natif, si vous souhaitez spécifier la taille de votre figure dans une unité de longueur raisonnable telle que les centimètres, vous pouvez faire ce qui suit (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))
Généraliser et simplifier la réponse de psihodelia. Si vous souhaitez modifier la taille actuelle de la figure d'un facteursizefactor
import matplotlib.pyplot as plt
# here goes your code
fig_size = plt.gcf().get_size_inches() #Get current size
sizefactor = 0.8 #Set a zoom factor
# Modify the current size by the factor
plt.gcf().set_size_inches(sizefactor * fig_size)
Après avoir modifié la taille actuelle, il peut arriver que vous deviez affiner la disposition du sous-tracé . Vous pouvez le faire dans l'interface graphique de la fenêtre de figure, ou au moyen de la commande subplots_adjust
Par exemple,
plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)
Une autre option, pour utiliser la fonction rc () dans matplotlib (l'unité est en pouces)
import matplotlib
matplotlib.rc('figure', figsize=[10,5])
Vous modifiez directement la taille de la figure en utilisant
plt.set_figsize(figure=(10, 10))
pyplot
n'a pas de méthode nommée set_figsize
.
plt.figure(figsize=(20,10))