Matplotlib에서 두 개의 imshow() 플롯이 서로 다른 데이터를 시각화하더라도 같은 색상 범위(컬러맵 스케일)를 사용하도록 설정하면, 두 이미지를 공정하게 비교할 수 있습니다. 이를 위해서는 전체 데이터의 최솟값과 최댓값을 구한 뒤, 각 플롯의 vmin과 vmax 인자에 동일하게 지정해 주면 됩니다.
구현 단계
- 그림 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
- Numpy를 사용하여 d1, d2 두 개의 행렬을 생성합니다.
- 두 행렬을 하나로 합친 결과 행렬을 만들어 최댓값과 최솟값을 계산합니다.
- 최솟값과 최댓값은 각각 np.amin()과 np.amax() 메서드로 구합니다.
- 새 그림(figure)을 생성하거나 기존 그림을 활성화합니다.
- nrows=1, ncols=2 배치에서 index 1 위치에 '~.axes.Axes'를 서브플롯으로 추가합니다.
- imshow() 메서드에 vmin과 vmax를 지정하여 컬러맵이 덮는 데이터 범위를 정의합니다.
- 두 번째 데이터에 대해서도 동일한 방식으로 서브플롯을 추가하고 imshow()를 호출합니다.
- show() 메서드를 호출하여 그림을 화면에 표시합니다.
예제 코드
import numpy as np from matplotlib import pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True data1 = np.random.randn(4, 4) data2 = np.random.randn(4, 4) resultant = np.array([data1, data2]) min_val, max_val = np.amin(resultant), np.amax(resultant) fig = plt.figure() ax = fig.add_subplot(1, 2, 1) ax.imshow(data1, cmap="plasma", vmin=min_val, vmax=max_val) ax2 = fig.add_subplot(1, 2, 2) ax2.imshow(data2, cmap="plasma", vmin=min_val, vmax=max_val) plt.show()
실행 결과
위 코드를 실행하면 두 개의 imshow 플롯이 나란히 표시되며, 두 플롯 모두 동일한 vmin~max 값 범위를 기준으로 plasma 컬러맵이 적용됩니다. 따라서 색상 강도만 보고도 두 데이터 집합의 값을 직접 비교할 수 있습니다.
핵심은 np.amin()과 np.amax()로 전체 데이터의 공통 최솟값·최댓값을 구한 후, 모든 imshow() 호출에 같은 vmin과 vmax를 전달하는 것입니다. 이 방법은 히트맵 비교, 이미지 처리 결과 분석 등 색상 일관성이 중요한 시각화 작업에 널리 활용됩니다.