Matplotlib에서 여러 그림을 한 그림에 올바르게 표시하는 방법

Suraj Joshi 2023년1월30일
  1. for 루프에서 Matplotlib add_subplot()사용
  2. Matplotlib의 서브 플롯을 기반으로 함수 정의
Matplotlib에서 여러 그림을 한 그림에 올바르게 표시하는 방법

그림에 여러 이미지를 표시하는 핵심 아이디어는 축 목록을 반복하여 개별 이미지를 그리는 것입니다. imshow() 메소드를 사용하여 개별 이미지를 표시합니다.

for 루프에서 Matplotlib add_subplot()사용

그림에 여러 이미지를 표시하는 가장 간단한 방법은add_subplot()을 사용하여 서브 플롯을 시작하고imshow()메소드를 사용하여 모든 이미지를 표시하여for 루프 안에 이미지를 표시하는 것입니다.

add_subplot()메소드의 구문:

add_subplot(rows, columns, i)

여기서rowscolumns는 복합 그림의 총 행과 열 수를 나타내고i는 표시 할 이미지의 인덱스를 나타냅니다.

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()

출력:

단순한 시뮬레이션 방식으로 여러 이미지 표시

위의 코드에 유연성을 추가하여 선택한 축에 더 많은 피쳐를 플롯하고 각 서브 플로트 축에 대한 액세스를 제공 할 수 있습니다.

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()

출력:

유연성을 갖춘 여러 이미지를 간단한 그림으로 표시

여기서 axes을 사용하면 각 하위 플롯을 조작 할 수 있습니다.

또는[row_index][column_index]를 사용하여 각 하위 플롯에 대한 액세스를 제공 할 수도 있습니다. 이는 여러 이미지 배열이있을 때 더 유용합니다.

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()

출력:

행 인덱스 열 인덱스를 사용하여 각 하위 그래프에 액세스

Matplotlib의 서브 플롯을 기반으로 함수 정의

그림에 여러 축을 생성하는 subplots 명령을 기반으로 함수를 정의 할 수 있습니다. 행 및 열 수에 따라 축 목록을 반복하여 각각에 제목을 추가하여 이미지를 플롯합니다.

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)

출력:

함수를 정의하여 그림에 여러 이미지를 표시

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn