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

Matplotlib 등고선 플롯에서 특정 레벨을 표시하는 방법

Matplotlib으로 그린 등고선 플롯(contour plot)에서 특정 레벨 값을 표시하고 싶다면, contour() 메서드로 등고선을 생성한 뒤 clabel() 메서드를 사용하면 됩니다. 아래 단계별로 살펴보겠습니다.

구현 단계

  • 그림 크기(figure size)를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
  • Numpy를 사용해 x, y, z 데이터 포인트를 생성합니다.
  • contour() 메서드를 사용하여 등고선 플롯을 만듭니다. 이때 레벨 개수를 지정할 수 있습니다.
  • clabel() 메서드를 사용해 각 등고선에 레벨 값을 라벨로 표시합니다.
  • 그림을 화면에 출력하려면 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)

# 3개의 레벨로 등고선 생성
contours = plt.contour(X, Y, Z, 3, colors='black')

# 등고선에 레벨 값 라벨 표시
plt.clabel(contours, inline=True, fontsize=8)

plt.show()

코드 설명

위 예제에서는 f(x, y) 함수를 정의하여 삼각함수 기반의 복잡한 곡면 데이터를 생성합니다. np.meshgrid()를 통해 x, y 좌표의 격자(grid)를 만들고, 이를 함수에 적용해 z값을 계산합니다.

plt.contour(X, Y, Z, 3, colors='black')에서 세 번째 인자인 3은 자동으로 선택되는 등고선 레벨의 개수를 의미합니다. 만약 특정 레벨 값만 표시하고 싶다면, 정수 대신 리스트 형태로 직접 지정할 수도 있습니다. 예를 들어 levels=[-0.5, 0, 0.5]처럼 원하는 값만 전달하면 해당 레벨의 등고선만 그려집니다.

plt.clabel(contours, inline=True, fontsize=8)은 각 등고선 위에 해당 레벨의 수치를 인라인 형태로 표시해 줍니다. inline=True 옵션은 라벨이 들어갈 자리의 선을 끊어 가독성을 높여줍니다.

출력 결과

위 코드를 실행하면 검은색 등고선 3개가 그려지고, 각 등고선 위에 해당 레벨 값이 작은 글씨로 표시된 그래프를 확인할 수 있습니다.