Wie man in Matplotlib mehrere Bilder in einer Abbildung korrekt anzeigt
-
Verwendung von
add_subplot()
in for-Schleife - Definieren Sie eine Funktion die auf den Teilplots basiert
Die Kernidee für die Anzeige mehrerer Bilder in einer Abbildung besteht darin, über die Liste der Achsen zu iterieren, um einzelne Bilder zu plotten. Wir verwenden die imshow()
Methode, um einzelne Bilder anzuzeigen.
Verwendung von add_subplot()
in for-Schleife
Der einfachste Ansatz zur Anzeige mehrerer Bilder in einer Abbildung könnte darin bestehen, jedes Bild mit Hilfe der Methode add_subplot()
anzuzeigen, um Subplot zu initiieren, und der Methode imshow()
, um ein Bild innerhalb einer for
-Schleife anzuzeigen.
Syntax für die Methode add_subplot()
:
add_subplot(rows, columns, i)
rows
und columns
die Gesamtzahl der Zeilen und Spalten in der zusammengesetzten Abbildung darstellen und i
den Index des anzuzeigenden Bildes darstellt.
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()
Ausgabe:
Wir können den obigen Code flexibler gestalten, um mehr Merkmale auf ausgewählten Achsen zu plotten und Zugang zu jeder Achse von Unterplots zu ermöglichen.
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()
Ausgabe:
Hier ermöglicht axes
den Zugang zur Manipulation jeder einzelnen Teilhandlung.
Alternativ können wir auch mit [row_index][column_index]
Zugang zu jedem der Subplots bieten, was hilfreicher ist, wenn wir ein Array aus mehreren Bildern haben.
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()
Ausgabe:
Definieren Sie eine Funktion die auf den Teilplots basiert
Wir können eine Funktion definieren, die auf dem Befehl subplots
basiert, die eine Anzahl von Achsen in den Abbildungen entsprechend der Anzahl der Zeilen und Spalten erzeugt und dann über die Liste der Achsen iteriert, um Bilder zu zeichnen, wobei für jede von ihnen ein Titel hinzugefügt wird.
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)
Ausgabe:
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn