Je me demandais comment je pouvais tracer des images côte à côte à l'aide de matplotlib
, par exemple, comme ceci:
Le plus proche que j'ai eu est la suivante:
Cela a été produit en utilisant ce code:
f, axarr = plt.subplots(2,2)
axarr[0,0] = plt.imshow(image_datas[0])
axarr[0,1] = plt.imshow(image_datas[1])
axarr[1,0] = plt.imshow(image_datas[2])
axarr[1,1] = plt.imshow(image_datas[3])
Mais je n'arrive pas à faire apparaître les autres images. Je pense qu'il doit y avoir une meilleure façon de le faire, car j'imagine qu'il serait difficile de gérer les index. J'ai parcouru la documentation bien que j’ai l’impression que je me trompe peut-être. Est-ce que quelqu'un pourrait me donner un exemple ou me diriger dans la bonne direction?
Le problème que vous rencontrez est que vous essayez de affecter le retour de imshow
(qui est un matplotlib.image.AxesImage
à un objet axes existant.
La manière correcte de tracer des données d’image sur les différents axes dans axarr
serait:
f, axarr = plt.subplots(2,2)
axarr[0,0].imshow(image_datas[0])
axarr[0,1].imshow(image_datas[1])
axarr[1,0].imshow(image_datas[2])
axarr[1,1].imshow(image_datas[3])
Le concept est le même pour toutes les sous-parcelles et, dans la plupart des cas, l'instance d'axes fournit les mêmes méthodes que l'interface pyplot (plt). Par exemple. Si ax
est l'un de vos axes de sous-parcelle, vous utiliseriez ax.plot(..)
au lieu de plt.plot()
pour tracer un tracé de courbe normal. Cela peut être trouvé exactement dans le source depuis la page vers laquelle vous créez un lien .
Vous tracez toutes vos images sur un seul axe. Ce que vous voulez, c'est obtenir une poignée pour chaque axe individuellement et y tracer vos images. Ainsi:
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax1.imshow(...)
ax2 = fig.add_subplot(2,2,2)
ax2.imshow(...)
ax3 = fig.add_subplot(2,2,3)
ax3.imshow(...)
ax4 = fig.add_subplot(2,2,4)
ax4.imshow(...)
Pour plus d'informations, regardez ici: http://matplotlib.org/examples/pylab_examples/subplots_demo.html
Pour les mises en page complexes, vous devriez envisager d'utiliser gridspec: http://matplotlib.org/users/gridspec.html
Une chose que j'ai trouvé très utile d'utiliser:
_, axs = plt.subplots(n_row, n_col, figsize=(12, 12))
axs = axs.flatten()
for img, ax in Zip(imgs, axs):
ax.imshow(img)
plt.show()