2009-08-13 20 views
27

¿Hay alguna manera de cambiar automáticamente el tamaño de una figura para que se ajuste correctamente a las gráficas contenidas en una imagen matplotlib/pylab?Cambiar el tamaño de una figura automáticamente en matplotlib

estoy creando heatmap (sub) parcelas que difieren en la relación de aspecto de acuerdo con los datos utilizados.

que se dan cuenta de que podía calcular la relación de aspecto y de forma manual la puso, pero seguro que hay una manera más fácil?

Respuesta

34

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.

+1

¿Qué indica higo.add_subplot (111)? Me refiero al número entre corchetes ((111)) – dangerous

3

Qué 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 para cambiar el tamaño de la imagen que contiene una sección sobre varias imágenes por figura.

también echar un vistazo a este question.

+0

me refiero a las dimensiones de la figura objeto. es decir, recorte la figura para que se ajuste a la (s) parcela (s) contenida (s). Uno probablemente tendría que proporcionar primero un ancho o una altura, y tener el otro calculado. – pufferfish

+0

Creo que el comando correcto es '' set_size_inches'' sin el '' fig'' – innisfree

12

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') 

que funciona incluso si es sólo para mostrar y no ahorrar

2

Otra forma de hacer esto es mediante el matplotlib tight_layout función

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() 
Cuestiones relacionadas