2009-08-13 20 views
27

C'è un modo per ridimensionare automaticamente una figura per adattarla correttamente ai grafici contenuti in un'immagine matplotlib/pylab?Ridimensiona automaticamente una figura in matplotlib

Sto creando grafici heatmap (sub) che differiscono in proporzioni in base ai dati utilizzati.

Mi rendo conto che potrei calcolare le proporzioni e impostarlo manualmente, ma sicuramente c'è un modo più semplice?

risposta

34

Usa bbox_inches = 'stretto'

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) 

... funziona solo quando il salvataggio delle immagini, però, non mostrando loro.

+1

Che cosa indica fig.add_subplot (111)? Intendo il numero tra parentesi quadre ((111)) – dangerous

3

Intendi cambiare la dimensione dell'immagine o l'area visibile all'interno di un grafico?

La dimensione di una figura può essere impostata con Figure.set_figsize_inches. Anche lo SciPy Cookbook ha una voce sulla modifica della dimensione dell'immagine che contiene una sezione su più immagini per figura.

Dai un'occhiata anche a questo question.

+0

Intendo le dimensioni dell'oggetto Figura. Ad esempio ritagliare la figura per adattarla alla/e trama/i contenuta/e. Probabilmente dovresti fornire prima una larghezza o un'altezza e l'altra calcolata. – pufferfish

+0

Penso che il comando corretto sia '' .set_size_inches'' senza '' fig'' – innisfree

12

basta usare aspect = 'auto' quando si chiama 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') 

funziona anche se è solo per mostrare e non risparmiando

2

Un altro modo per farlo è usare la matplotlib tight_layout funzione di

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() 
Problemi correlati