Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 contourf와 로그 색상 스케일로 등고선 플롯 그리는 방법

Matplotlib에서 contourf() 메서드와 로그(log) 색상 스케일을 함께 사용하면 값의 범위가 넓거나 특정 구간에 값이 몰려 있는 데이터를 효과적으로 시각화할 수 있습니다. 로그 스케일을 적용하면 작은 값과 큰 값의 차이를 한눈에 파악하기 쉬워집니다.

구현 단계

contourf와 로그 스케일을 사용해 등고선 플롯을 그리려면 다음 단계를 따르면 됩니다.

  • 그림 크기를 설정하고 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
  • 샘플 데이터의 개수를 나타내는 변수 N을 초기화합니다.
  • numpy를 사용하여 x, y, X, Y, Z1, Z2z 데이터 포인트를 생성합니다.
  • figure와 서브플롯 집합을 생성합니다.
  • contourf() 메서드를 사용하여 등고선을 플롯합니다. 이때 LogLocator를 지정해 로그 스케일을 적용합니다.
  • ScalarMappable 인스턴스에 대한 컬러바(colorbar)를 생성합니다.
  • show() 메서드를 사용하여 그림을 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np
from numpy import ma
from matplotlib import ticker, cm

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

N = 100
x = np.linspace(-3.0, 3.0, N)
y = np.linspace(-2.0, 2.0, N)

X, Y = np.meshgrid(x, y)

Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X * 10)**2 - (Y * 10)**2)

z = Z1 + 50 * Z2
z[:5, :5] = -1
z = ma.masked_where(z <= 0, z)
fig, ax = plt.subplots()

cs = ax.contourf(X, Y, z, locator=ticker.LogLocator(), cmap=cm.PuBu_r)
cbar = fig.colorbar(cs)

plt.show()

코드 설명

  • meshgrid(): 1차원 배열 x, y로부터 2차원 격자 좌표 X, Y를 만들어 등고선 계산에 사용합니다.
  • Z1, Z2: 가우시안 형태의 두 개의 데이터셋으로, Z2는 좁은 범위에 집중된 값을 가집니다. 두 값을 합쳐 폭넓은 값 분포를 가진 z를 만듭니다.
  • masked_where(): 0 이하의 값은 로그 스케일에서 정의되지 않으므로 마스킹하여 제외합니다.
  • ticker.LogLocator(): 컬러바 눈금을 로그 간격(1, 10, 100 등)으로 배치하여 로그 색상 스케일을 구현하는 핵심 요소입니다.
  • cmap=cm.PuBu_r: 보라색~파란색 계열의 반전 컬러맵을 사용해 시각적 대비를 높입니다.

출력 결과

위 코드를 실행하면 로그 스케일의 컬러바가 오른쪽에 표시되며, 중앙의 좁은 영역에 있는 높은 값(Z2 성분)과 넓게 퍼진 낮은 값(Z1 성분)이 동시에 선명하게 드러나는 등고선 플롯을 확인할 수 있습니다.