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?

¿Fue útil?

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.

También echa un vistazo a esta pregunta .

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) 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top