Cambiar el tamaño de una figura de forma automática en matplotlib
-
13-09-2019 - |
Pregunta
¿Hay una manera de cambiar automáticamente el tamaño de una figura para encajar correctamente parcelas contenidos en la imagen de un matplotlib / pylab en?
Estoy creando mapa de calor (sub) parcelas que difieren en la relación de aspecto de acuerdo con los datos utilizados.
Me di cuenta de que podía calcular la relación de aspecto y determinar manualmente, pero seguro que hay una manera más fácil?
Solución
Uso bbox_inches = 'apretada'
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = 10*np.random.rand(5,3)
fig = plt.figure(figsize=(15,5),facecolor='w')
ax = fig.add_subplot(111)
ax.imshow(X, cmap=cm.jet)
plt.savefig("image.png",bbox_inches='tight',dpi=100)
... sólo funciona al guardar las imágenes, sin embargo, no mostrando ellos.
Otros consejos
sólo tiene que utilizar aspecto = 'auto' cuando se llama imshow
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = 10*np.random.rand(5,3)
plt.imshow(X, aspect='auto')
funciona incluso si es sólo para mostrar y no ahorrar
Otra forma de hacer esto es usar la función matplotlib tight_layout
import matplotlib.pyplot as plt
fig,(ax) = plt.subplots(figsize=(8,4), ncols=1)
data = [0,1,2,3,4]
ax.plot(data)
fig.tight_layout()
fig.show()
¿Quiere decir cambiar el tamaño de la imagen o el área que es visible dentro de una parcela?
El tamaño de una figura se puede ajustar con Figure.set_figsize_inches . También el SciPy Cookbook tiene una entrada en el cambio de tamaño de la imagen que contiene una sección sobre varias imágenes por figura.
puede probar a usar eje ( 'escalada')
import matplotlib.pyplot as plt
import numpy
#some dummy images
img1 = numpy.array([[.1,.2],[.3,.4]])
img2 = numpy.array([[.1,.2],[.3,.4]])
fig,ax = plt.subplots()
ax.imshow(img1,extent=[0,1,0,1])
ax.imshow(img2,extent=[2,3,0,1])
ax.axis('scaled') #this line fits your images to screen
plt.show()
También es posible usar ax.autoscale con el hacha objeto
ax.autoscale(enable=True)