Domanda

C'è un modo per ridimensionare automaticamente una figura per adattarsi correttamente trame contenute un'immagine matplotlib / pylab in?

Sto creando HeatMap (sotto) trame che differiscono nel rapporto di formato secondo i dati utilizzati.

Mi rendo conto che potrei calcolare il rapporto di aspetto e impostare manualmente, ma sicuramente c'è un modo più semplice?

È stato utile?

Soluzione

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.

Altri suggerimenti

semplicemente 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

Un altro modo di fare è usare la funzione di 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()

Vuoi dire la modifica della dimensione dell'immagine o la zona che è visibile all'interno di un complotto?

La dimensione di un dato può essere impostato con Figure.set_figsize_inches . Anche il SciPy Cookbook ha una voce su come cambiare le dimensioni dell'immagine che contiene una sezione su più immagini per ogni figura.

Anche prendere un'occhiata a questa domanda .

si può provare a utilizzare l'asse ( 'scala')

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

Anche possibile utilizzare ax.autoscale con ascia oggetto

ax.autoscale(enable=True) 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top