python - real - ¿Cómo cambias el tamaño de las figuras dibujadas con matplotlib?
matplotlib python 3 (13)
Nota de desaprobación:
Según la guía oficial de Matplotlib , ya no se recomienda el uso del módulopylab
. Por favor, considere usar el módulomatplotlib.pyplot
lugar, como se describe en esta otra respuesta .
Lo siguiente parece funcionar:
from pylab import rcParams
rcParams[''figure.figsize''] = 5, 10
Esto hace que el ancho de la figura sea de 5 pulgadas, y su altura de 10 pulgadas .
La clase Figure luego usa esto como el valor predeterminado para uno de sus argumentos.
¿Cómo cambias el tamaño de la figura dibujada con matplotlib?
USO DE PLT.RCParams
También existe esta solución en caso de que desee cambiar el tamaño sin utilizar el entorno de figura. Entonces, en caso de que estés usando plt.plot()
por ejemplo.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Esto es muy útil cuando grafica en línea (por ejemplo, con IPython Notebook).
Conversión a cm
La tupla de figsize
acepta pulgadas, por lo tanto, si desea establecerla en centímetros, debe dividirla por 2.54. Eche un vistazo a esta pregunta .
Dado que Matplotlib no puede usar el sistema métrico de forma nativa, si desea especificar el tamaño de su figura en una unidad de longitud razonable, como centímetros, puede hacer lo siguiente (código 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)
Entonces puedes usar:
plt.figure(figsize=cm2inch(21, 29.7))
El primer enlace en Google para ''matplotlib figure size''
es AdjustingImageSize ( caché de Google de la página ).
Aquí hay un script de prueba de la página anterior. Crea archivos de test[1-3].png
de diferentes tamaños de la misma imagen:
#!/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.
Salida:
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.]
Dos notas:
Los comentarios del módulo y la salida real difieren.
Esta respuesta permite combinar fácilmente las tres imágenes en un archivo de imagen para ver la diferencia de tamaños.
En caso de que esté buscando una manera de cambiar el tamaño de la figura en Pandas, podría hacer, por ejemplo:
df[''some_column''].plot(figsize=(10, 5))
donde df
es un marco de datos de Pandas. Si desea cambiar la configuración predeterminada, puede hacer lo siguiente:
import matplotlib
matplotlib.rc(''figure'', figsize=(10, 5))
Esto cambia el tamaño de la figura inmediatamente incluso después de que la figura haya sido dibujada (al menos utilizando Qt4Agg / TkAgg, pero no MacOSX, con matplotlib 1.4.0):
matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)
Esto funciona bien para mi:
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
Esto también podría ayudar: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Intenta comentar la línea 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()
Para aumentar el tamaño de su figura N veces necesita insertar esto justo antes de su pl.show ():
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )
También funciona bien con ipython notebook.
Por favor intente un código simple de la siguiente manera:
from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()
Es necesario establecer el tamaño de la figura antes de trazar.
Si ya tienes la figura creada, puedes hacer esto rápidamente:
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig(''test2png.png'', dpi=100)
Para propagar el cambio de tamaño a una ventana existente, agregue forward=True
fig.set_size_inches(18.5, 10.5, forward=True)
Simplemente puede usar (desde matplotlib.figure.Figure ):
fig.set_size_inches(width,height)
A partir de Matplotlib 2.0.0, los cambios en su lienzo serán visibles inmediatamente, ya que la palabra clave de forward
predeterminada en True
.
Si solo desea cambiar el ancho o el alto en lugar de ambos, puede usar
fig.set_figwidth(val)
o fig.set_figheight(val)
Estos también actualizarán inmediatamente su lienzo, pero solo en Matplotlib 2.2.0 y más reciente.
Para versiones anteriores
Debe especificar forward=True
explícitamente para actualizar en vivo su lienzo en versiones anteriores a las especificadas anteriormente. Tenga en cuenta que las funciones set_figwidth
y set_figheight
no admiten el parámetro forward
en versiones anteriores a Matplotlib 1.5.0.
figure te dice la firma de la llamada:
from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor=''w'', edgecolor=''k'')
figure(figsize=(1,1))
crearía una imagen pulgada por pulgada, que sería de 80 por 80 píxeles a menos que también proporcione un argumento de ppp diferente.