Question

Est-il possible de redimensionner automatiquement une figure pour ajuster correctement les parcelles contenues dans une image matplotlib / pylab?

Je crée des parcelles de heatmap (sous-) qui diffèrent par leur rapport d'aspect en fonction des données utilisées.

Je me rends compte que je pouvais calculer le ratio d'aspect et de la régler manuellement, mais il y a sûrement un moyen plus facile?

Était-ce utile?

La solution

Utilisez bbox_inches = 'serré'

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)

... ne fonctionne que lors de l'enregistrement des images bien, ne pas les montrer.

Autres conseils

utiliser juste aspect = 'auto' lorsque vous appelez 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')

il fonctionne même si elle est juste pour montrer et ne pas sauver

Une autre façon de faire est d'utiliser la fonction 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()

Voulez-vous dire changer la taille de l'image ou la zone qui est visable dans une parcelle?

La taille d'un chiffre peut être réglé avec Figure.set_figsize_inches . De plus, le SciPy livre de recettes a une entrée sur la taille de l'image changeante qui contient une section sur plusieurs images par la figure.

Jetez aussi un coup d'œil à cette question .

vous pouvez essayer d'utiliser l'axe ( 'échelle')

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

également possible d'utiliser ax.autoscale avec une hache objet

ax.autoscale(enable=True) 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top