Existe-t-il un moyen de redimensionner automatiquement une figure pour ajuster correctement les parcelles contenues dans une image matplotlib/pylab?
Je crée des (sous-) diagrammes heatmap dont les proportions sont différentes en fonction des données utilisées.
Je me rends compte que je pourrais calculer le rapport de format et le définir manuellement, mais il existe sûrement un moyen plus facile?
Utilisez bbox_inches = 'tight'
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 si vous enregistrez des images, mais ne les affiche pas.
utilisez simplement 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')
ça marche même si c'est juste pour montrer et ne pas sauvegarder
Une autre façon de faire consiste à utiliser la fonction tight_layout de matplotlib
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 visible dans une parcelle?
La taille d'une figure peut être définie avec Figure.set_figsize_inches . Le SciPy Cookbook contient également une entrée sur la modification de la taille de l'image qui contient une section sur plusieurs images par figure.
Regardez aussi cette question .
vous pouvez essayer d'utiliser axis ('scaled')
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()
Aussi possible d'utiliser ax.autoscale avec un objet ax
ax.autoscale(enable=True)