Comment changer la taille des chiffres établis avec matplotlib?
Comment changer la taille de la figure dessinée avec matplotlib?
13 réponses
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 à moins que vous ne donniez aussi un argument dpi différent.
si vous avez déjà le chiffre créé, 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 à une fenêtre gui existante ajouter forward=True
fig.set_size_inches(18.5, 10.5, forward=True)
note de dépréciation:
Conformément au Guide officiel Matplotlib , l'utilisation du modulepylab
n'est plus recommandée. Veuillez plutôt utiliser le modulematplotlib.pyplot
, tel que décrit par cette autre réponse .
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 alors cette valeur par défaut pour l'un de ses arguments.
s'il vous plaît 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.
utilisant plt.rcParams
il y a aussi cette solution au cas où vous voudriez changer la taille sans utiliser l'environnement figure. Donc, dans le cas où vous utilisez plt.plot()
par exemple.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
c'est très utile lorsque vous tracez en ligne (par exemple avec le carnet IPython).
Conversion en cm
le figsize
tuple accepte les pouces donc si vous voulez le régler en centimètres vous devez divisez-les par 2.54 regardez à cette question .
le premier lien de Google pour 'matplotlib figure size'
est AdjustingImageSize ( Google cache de la page ).
voici un script de test de la page ci-dessus. Il crée des fichiers test[1-3].png
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:
-
les commentaires du module et la sortie réelle différer.
-
cette réponse permet facilement de combiner les trois images dans un fichier image pour voir la différence de tailles.
dans le cas où vous êtes à la recherche d'un moyen de changer la taille de la figure dans les Pandas, vous pouvez faire par exemple:
df['some_column'].plot(figsize=(10, 5))
où df
est une base de données Pandas. Si vous souhaitez modifier les paramètres par défaut, vous pouvez faire ce qui suit:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
essayer 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()
vous pouvez simplement utiliser (à partir de matplotlib.figure.Figure ):
fig.set_size_inches(width,height)
à partir de Matplotlib 2.0.0, les changements à votre toile seront visibles immédiatement, comme le forward
mot-clé par défaut à True
.
si vous voulez juste changer la largeur ou hauteur au lieu des deux, vous pouvez utiliser
fig.set_figwidth(val)
ou fig.set_figheight(val)
ceux-ci seront également mettre à jour immédiatement votre toile, mais seulement dans Matplotlib 2.2.0 et plus récent.
Pour Les Anciennes Versions
vous devez spécifier forward=True
explicitement afin de vivre-mettre à jour votre toile dans des versions plus anciennes que ce qui est spécifié ci-dessus. Notez que les fonctions set_figwidth
et set_figheight
ne supportent pas le paramètre forward
dans les versions plus anciennes que Matplotlib 1.5.0.
pour augmenter la taille de votre figure N fois que vous avez besoin d'insérer cela 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 aussi bien avec le carnet ipython.
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
puisque Matplotlib n'est pas capable d'utiliser le système métrique nativement, si vous voulez spécifier la taille de votre figure dans une unité raisonnable de longueur comme 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))
ceci redimensionne le chiffre immédiatement après que le chiffre a été tiré (au moins en utilisant Qt4Agg / TkAgg - mais pas MacOSX - avec matplotlib 1.4.0):
matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)