Comment afficher correctement plusieurs images dans une figure dans Matplotlib
-
Utilisez Matplotlib
add_subplot()
dans la bouclefor
- Définir une fonction basée sur les sous-parcelles dans Matplotlib
L’idée de base pour afficher plusieurs images dans une figure est d’itérer sur la liste des axes pour tracer des images individuelles. Nous utilisons la méthode imshow()
pour afficher des images individuelles.
Utilisez Matplotlib add_subplot()
dans la boucle for
L’approche la plus simple pour afficher plusieurs images dans une figure peut être d’afficher chaque image en utilisant add_subplot()
pour lancer le sous-tracé et la méthode imshow()
pour afficher une image à l’intérieur d’une boucle for
.
Syntaxe de la méthode add_subplot()
:
add_subplot(rows, columns, i)
où rows
et columns
représentent le nombre total de lignes et de colonnes dans la figure composite et i
représente l’index de l’image à afficher.
import numpy as np
import matplotlib.pyplot as plt
width = 5
height = 5
rows = 2
cols = 2
axes = []
fig = plt.figure()
for a in range(rows * cols):
b = np.random.randint(7, size=(height, width))
axes.append(fig.add_subplot(rows, cols, a + 1))
subplot_title = "Subplot" + str(a)
axes[-1].set_title(subplot_title)
plt.imshow(b)
fig.tight_layout()
plt.show()
Production:
Nous pouvons ajouter plus de flexibilité dans le code ci-dessus pour tracer plus d’entités sur les axes sélectionnés et donner accès à chacun des axes des sous-tracés.
import numpy as np
import matplotlib.pyplot as plt
width = 5
height = 5
rows = 2
cols = 2
fig = plt.figure()
x = np.linspace(-3, 3, 100)
y1 = np.sin(x)
y2 = 1 / (1 + np.exp(-x))
axes = []
for i in range(cols * rows):
b = np.random.randint(10, size=(height, width))
axes.append(fig.add_subplot(rows, cols, i + 1))
subplot_title = "Subplot" + str(i)
axes[-1].set_title(subplot_title)
plt.imshow(b)
axes[1].plot(x, y1)
axes[3].plot(x, y2)
fig.tight_layout()
plt.show()
Production:
Ici, axes
permet d’accéder à manipuler chacune des sous-parcelles.
Alternativement, nous pouvons également fournir un accès à chacun des sous-tracés avec [row_index][column_index]
, ce qui est plus utile lorsque nous avons un tableau de plusieurs images.
import numpy as np
import matplotlib.pyplot as plt
width = 5
height = 5
rows = 2
cols = 2
x = np.linspace(0, 3, 100)
y1 = np.sin(x)
y2 = 1 / (1 + np.exp(-x))
figure, axes = plt.subplots(nrows=rows, ncols=cols)
for a, b in enumerate(axes.flat):
image = np.random.randint(7, size=(height, width))
b.imshow(image, alpha=0.25)
r = a // cols
c = a % cols
subtitle = "Row:" + str(r) + ", Col:" + str(c)
b.set_title(subtitle)
axes[0][1].plot(x, y1)
axes[1][1].plot(x, y2)
figure.tight_layout()
plt.show()
Production:
Définir une fonction basée sur les sous-parcelles dans Matplotlib
Nous pouvons définir une fonction basée sur la commande subplots qui crée un certain nombre d’axes dans les figures, en fonction du nombre de lignes et de colonnes, puis parcourt la liste des axes pour tracer des images en ajoutant un titre pour chacune d’entre elles.
import numpy as np
import matplotlib.pyplot as plt
def display_multiple_img(images, rows=1, cols=1):
figure, ax = plt.subplots(nrows=rows, ncols=cols)
for ind, title in enumerate(images):
ax.ravel()[ind].imshow(images[title])
ax.ravel()[ind].set_title(title)
ax.ravel()[ind].set_axis_off()
plt.tight_layout()
plt.show()
total_images = 4
images = {"Image" + str(i): np.random.rand(100, 100) for i in range(total_images)}
display_multiple_img(images, 2, 2)
Production:
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn