HOWTO · Matplotlib

Matplotlib에서 등고선 플롯을 만드는 방법

NumPy 격자, 스칼라 필드, 컬러바를 사용해 Matplotlib에서 선 등고선 플롯과 채워진 등고선 플롯을 만듭니다.

이 페이지의 내용

Matplotlib의 contour()는 2차원 스칼라 필드에서 값이 같은 지점을 잇는 선을 그리고, contourf()는 그 선 사이의 영역을 채웁니다. 두 방법 모두 NumPy로 좌표 격자를 만들고 그릴 값을 계산할 수 있으며, 컬러바는 색상이 각 값과 어떻게 대응하는지 보여 줍니다.

Matplotlib에서 contour() 메서드로 등고선 플롯 그리기

등고선 플롯은 2차원 평면의 스칼라 필드를 나타냅니다. x와 y 배열은 각각 가로와 세로 좌표를 제공하고, z에는 각 좌표 쌍의 스칼라 값이 들어 있습니다. 각 등치선은 z 값이 같은 점들을 연결합니다. Matplotlib은 세 배열의 해당 요소를 함께 사용합니다. x[i, j]와 y[i, j]가 한 점의 위치를 지정하고, z[i, j]가 그 점의 값을 제공합니다. 따라서 좌표 격자와 값 배열은 서로 호환되는 2차원 형태여야 합니다.

예제에서는 numpy.linspace()로 각 축에 대해 -2부터 2까지의 좌표 500개를 만듭니다. np.meshgrid()는 이 1차원 좌표들을 서로 대응하는 2차원 배열로 확장하고, z = np.sin(x) + np.cos(y)는 격자의 각 위치에서 값을 계산합니다. 좌표 격자를 만드는 방법은 np.meshgrid() 메서드를 참조하세요.

다음 예제는 격자를 만들고 등치선을 그린 뒤 컬러바를 추가하고 그림 창을 엽니다. 독자가 직접 실행할 수 있도록 코드를 제공합니다. 이 초안에는 실행 결과가 첨부되어 있지 않습니다.

import matplotlib.pyplot as plot
import numpy as np

x_values = np.linspace(-2, 2, 500)
y_values = np.linspace(-2, 2, 500)
x, y = np.meshgrid(x_values, y_values)
z = np.sin(x) + np.cos(y)

plot.contour(x, y, z)
plot.colorbar()
plot.show()

contour()의 처음 두 인수는 좌표 격자이고 세 번째 인수는 스칼라 필드입니다. 이 함수는 등치선을 그릴 위치를 제어하는 levels 등 여러 선택적 인수도 받습니다. levels를 지정하지 않으면 Matplotlib이 데이터 범위에 따라 레벨을 선택합니다. plot.colorbar()는 플롯의 색상으로 표현된 필드 값을 읽을 수 있는 눈금을 추가합니다. 이를 사용하면 등치선의 값을 해석하거나 여러 위치의 값을 비교하기 쉽습니다. 축에는 계속 x와 y 좌표가 표시됩니다.

Line contour plot created with contour()

Matplotlib에서 contourf() 메서드 사용하기

채워진 등고선 플롯에는 contourf()를 사용합니다. 이 함수는 등치선 사이의 영역을 색으로 채우고, contour()는 등치선을 그립니다. 두 메서드에서 입력값의 역할은 같으므로 첫 번째 예제의 격자와 스칼라 필드를 재사용할 수 있습니다. 채워진 플롯은 넓은 값 범위를 비교하기 편하며, 컬러바는 각 색상에 숫자 척도를 부여합니다. 이 완전한 예제는 levels=30도 설정하고 컬러바를 추가합니다. 독자가 직접 실행할 수 있도록 제공하는 코드이며, 이 초안에는 실행 결과가 첨부되어 있지 않습니다.

import matplotlib.pyplot as plot
import numpy as np

x_values = np.linspace(-2, 2, 500)
y_values = np.linspace(-2, 2, 500)
x, y = np.meshgrid(x_values, y_values)
z = np.sin(x) + np.cos(y)

filled = plot.contourf(x, y, z, levels=30, vmin=-1, vmax=0.5)
plot.colorbar(filled)
plot.show()

levels는 등치선의 레벨을 지정하므로 필드가 색상 영역으로 나뉘는 방식을 제어합니다. 반면 vmin과 vmax는 색상 정규화의 하한과 상한을 설정합니다. 이 값들은 z의 데이터를 제거하거나 등치선 레벨을 선택하지 않습니다. 정규화 한계보다 낮거나 높은 값도 플롯에 표현되며 컬러맵의 under 또는 over 색상에 대응합니다. 기본 컬러맵에서는 under와 over 색상을 따로 지정하지 않는 한 양 끝 색상이 사용됩니다.

이 예제에서는 z의 값이 -1부터 0.5까지의 색상 범위를 벗어나더라도 채워진 등고선 플롯에 계속 포함됩니다. 등치선 구분을 바꾸려면 levels를 사용하고, 값이 색상 척도에 대응하는 방식을 바꾸려면 vmin 또는 vmax를 사용하세요.

Filled contour plot created with contourf()

Filled contour plot with 30 levels and color limits from -1 to 0.5