Visualizza più immagini in una figura correttamente in Matplotlib
-
Usa Matplotlib
add_subplot()
nel ciclifor
- Definire una funzione in base alle sottotrame in Matplotlib
L’idea principale per visualizzare più immagini in una figura è scorrere l’lista degli assi per tracciare singole immagini. Usiamo il metodo imshow()
per visualizzare singole immagini.
Usa Matplotlib add_subplot()
nel cicli for
L’approccio più semplice per visualizzare più immagini in una figura potrebbe essere visualizzare ogni immagine usando add_subplot()
per avviare la sottotrama e il metodo imshow()
per visualizzare un’immagine all’interno di un cicli for
.
Sintassi per il metodo add_subplot()
:
add_subplot(rows, rows, i)
dove rows
e rows
rappresentano il numero totale di righe e colonne nella figura composta e i
rappresenta l’indice dell’immagine da visualizzare.
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()
Produzione:
Possiamo aggiungere maggiore flessibilità nel codice precedente per tracciare più caratteristiche sugli assi selezionati e fornire accesso a ciascun asse delle sottotrame.
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()
Produzione:
Qui, axes
consente l’accesso per manipolare ciascuna delle sottotrame.
In alternativa, possiamo anche fornire l’accesso a ciascuno dei sotto-grafici con [row_index][column_index]
, che è più utile quando abbiamo un array di più immagini.
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()
Produzione:
Definire una funzione in base alle sottotrame in Matplotlib
Possiamo definire una funzione basata sul comando sottotrame che crea un numero di assi nelle figure, in base al numero di righe e colonne, e quindi itera sulla lista degli assi per tracciare le immagini aggiungendo un titolo per ognuna di esse.
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)
Produzione:
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn