matplotlib의 등치선(contour) 표현하기

등치선은 공간상에 분포하는 동일한 값을 가지는 인접한 지점을 연속적으로 이어 구성한 선입니다. 대기 확산 모델을 시각화하기 위한 매우 효과적인 방법입니다.

아래의 그림은 contour 그래프를 구성하기 위한 코드로써 작성한 예제에 대한 결과입니다.

위의 결과를 위해서는 먼저 시각화 대상이 되는 데이터가 필요합니다. 공간상에 균일하게 분포하는 값에 대한 데이터인데요. 데이터 구성을 위한 코드는 다음과 같습니다.

import matplotlib.pyplot as plt
import matplotlib.tri as tri
import numpy as np

npts = 100
x = np.random.uniform(-2, 2, npts)
y = np.random.uniform(-2, 2, npts)
z = x * np.exp(-x**2 - y**2)

ngridx = 100
ngridy = 100
xi = np.linspace(-2.2, 2.2, ngridx)
yi = np.linspace(-2.2, 2.2, ngridy)

triang = tri.Triangulation(x, y)
interpolator = tri.LinearTriInterpolator(triang, z)
Xi, Yi = np.meshgrid(xi, yi)
zi = interpolator(Xi, Yi)

위의 코드를 통해 2차원(x, y) 공간 상에 분포하는 값(z)으로 변수 xi, yi, zi를 얻게 됩니다. 이 3개의 변수를 이용해 등치선을 표현할 수 있는데, 그 코드는 다음과 같습니다.

plt.contour(xi, yi, zi, levels=15, linewidths=0.5, colors='k')

cntr = plt.contourf(xi, yi, zi, levels=15, cmap="RdBu_r")
plt.colorbar(cntr)
plt.plot(x, y, 'ko', ms=3)

plt.show()

위의 코드 중 1번이 지정한 levels 수에 맞게 등치선(검정색 선)을 표현하며, 3번 코드는 등치값들을 포함하는 영역을 지정한 levels 수에 맞게 표현하는 코드입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다