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 좌표가 표시됩니다.
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를 사용하세요.