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

Matplotlib 2D 등고선 플롯에서 추가 등고선 레벨 지정하기

Matplotlib의 2D 등고선 플롯(contour plot)에서 원하는 개수만큼 추가 등고선을 그리려면 levels 매개변수에 레벨 목록을 직접 지정하면 됩니다. 아래 단계를 따라 진행할 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 사이와 주변의 여백(padding)을 조정합니다.
  • x와 y 값으로부터 z 데이터 포인트를 계산하는 함수 f(x, y)를 정의합니다.
  • NumPy를 사용하여 x, y 데이터 포인트를 생성합니다.
  • np.meshgrid()로 좌표 격자를 만들고 함수에 적용해 z 값을 계산합니다.
  • np.arange()를 이용해 등고선 레벨 목록을 생성합니다. 이 목록이 곧 그려질 등고선의 위치를 결정합니다.
  • contour() 메서드에 levels 인자를 전달하여 등고선 플롯을 그립니다.
  • clabel() 메서드로 각 등고선에 수치 레이블을 표시하고, title()로 플롯 제목을 설정합니다.
  • show() 메서드로 최종 그림을 화면에 출력합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

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

def f(x, y):
    return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)
levels = np.arange(-1.0, 1.5, 0.25)
CS = plt.contour(X, Y, Z, levels=levels)

plt.clabel(CS, inline=1, fontsize=10)

plt.title('levels = {}'.format(levels.tolist()))

plt.show()

코드 설명

위 예제에서 핵심은 levels 변수입니다. np.arange(-1.0, 1.5, 0.25)는 -1.0부터 1.25까지 0.25 간격의 값을 가진 배열을 생성하며, 이 값마다 하나의 등고선이 그려집니다. 즉, 간격(step) 값을 줄일수록 더 촘촘한 등고선이 표현되어 데이터의 미세한 변화를 확인할 수 있습니다.

f(x, y) 함수는 sin과 cos의 조합으로 이루어진 파동 형태의 값을 반환하며, np.meshgrid를 통해 만든 2차원 격자 위에서 z 값을 계산하는 데 사용됩니다. plt.clabel(CS, inline=1, fontsize=10)은 등고선 위에 해당 z 값을 인라인 형태로 표시해 어떤 레벨의 선인지 한눈에 알아보게 해줍니다.

실행 결과

코드를 실행하면 지정된 레벨(-1.0 ~ 1.25, 0.25 간격)에 따라 여러 개의 등고선이 그려지고, 각 선 위에 레벨 값이 레이블로 표시됩니다. 플롯 제목에는 사용된 전체 레벨 목록이 함께 나타납니다.