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

Python Matplotlib로 다변수 함수 시각화하기: 산점도 플롯 단계별 가이드

Python의 Matplotlib 라이브러리를 활용하면 다변수(multivariate) 함수를 효과적으로 시각화할 수 있습니다. 이 글에서는 세 개의 변수(x, y, z)를 가진 함수를 산점도(scatter plot) 형태로 플롯하고, 색상 맵과 컬러바를 추가하여 데이터의 분포를 직관적으로 표현하는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 자동으로 조정합니다.

  • NumPy를 사용하여 무작위(random) x, y, z 데이터 포인트를 생성합니다.

  • figure 객체와 서브플롯(subplots) 집합을 생성합니다.

  • x, y, z 데이터 포인트를 기반으로 산점도를 생성합니다.

  • ScalarMappable 인스턴스 s에 대한 컬러바(colorbar)를 추가하여 색상 값의 범위를 표시합니다.

  • show() 메서드를 호출하여 최종 그림을 화면에 출력합니다.

예제 코드

아래 예제에서는 다변수 함수 func(x, y) = 3x + 4y - 2에 무작위 노이즈를 더한 값을 z축 데이터로 사용합니다. 각 점의 색상은 z값에 따라 'plasma' 컬러맵으로 매핑되며, 마커는 별(*) 모양으로 지정했습니다.

import numpy as np
import matplotlib.pyplot as plt

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

def func(x, y):
    return 3 * x + 4 * y - 2 + np.random.randn(30)

x, y = np.random.randn(2, 30)
y *= 100
z = func(x, y)

fig, ax = plt.subplots()

s = ax.scatter(x, y, c=z, s=100, marker='*', cmap='plasma')

fig.colorbar(s)

plt.show()

코드 설명

plt.rcParams 설정을 통해 그림 크기를 7.50 × 3.50 인치로 지정하고, autolayout 옵션으로 요소들이 잘리지 않도록 여백을 자동 조절합니다. np.random.randn(2, 30)은 정규분포를 따르는 난수 60개를 생성하여 x와 y 배열에 할당하며, y값에 100을 곱해 스케일을 조정합니다.

ax.scatter() 메서드에서 핵심 파라미터는 다음과 같습니다:

  • c=z: z값에 따라 각 점의 색상을 결정합니다.

  • s=100: 마커의 크기를 지정합니다.

  • marker='*': 별 모양의 마커를 사용합니다.

  • cmap='plasma': 색상 그라데이션에 plasma 컬러맵을 적용합니다.

마지막으로 fig.colorbar(s)를 호출하면 z값의 크기에 따른 색상 범위를 한눈에 파악할 수 있는 컬러바가 그림 오른쪽에 추가됩니다.

실행 결과

위 코드를 실행하면 x-y 평면에 흩어진 별 모양의 데이터 포인트들이 z값에 따라 plasma 컬러맵으로 채색된 산점도가 출력됩니다. 컬러바를 통해 각 색상이 나타내는 z값의 범위를 확인할 수 있어, 다변수 함수의 전체적인 경향과 분포를 직관적으로 이해할 수 있습니다.