Python에서 벡터장의 컬(curl)을 계산하고 이를 Matplotlib로 시각화하려면 quiver() 메서드를 활용해 벡터 데이터를 그려볼 수 있습니다. quiver는 3차원 공간상의 벡터를 화살표 형태로 표현해 주기 때문에 컬처럼 회전 성분을 가진 장을 직관적으로 확인하는 데 적합합니다.
구현 단계
- 그림 크기를 설정하고, 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
- figure() 메서드를 사용해 새로운 figure를 생성하거나 기존 figure를 활성화합니다.
- 서브플롯 배치의 일부로 figure에 3D 축(axes)을 추가합니다.
- numpy의 meshgrid를 사용해 x, y, z 데이터 포인트를 생성합니다.
- 컬 벡터 위치에 해당하는 u, v, w 성분 데이터를 정의합니다.
- quiver() 메서드를 호출하여 벡터를 그립니다.
- axis('off')로 축을 숨겨 벡터장만 깔끔하게 보이도록 합니다.
- show() 메서드로 최종 결과물을 화면에 출력합니다.
예제 코드
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
u = 0
v = y**2
w = -2*y*z - y
ax.quiver(x, y, z, u, v, w, length=0.1)
ax.axis('off')
plt.show()실행 결과
위 코드를 실행하면 3차원 공간에 배치된 격자 지점마다 계산된 컬 벡터가 화살표로 렌더링됩니다. 각 화살표의 길이와 방향은 해당 지점에서 벡터장의 회전 성분 크기와 방향을 나타내며, length=0.1 옵션을 통해 화살표 길이를 조절할 수 있습니다.
코드 설명
이 예제에서 사용된 벡터장은 다음과 같이 정의됩니다.
- u = 0: x 방향 성분은 없습니다.
- v = y²: y 방향 성분은 y 좌표의 제곱에 비례합니다.
- w = -2yz - y: z 방향 성분은 y와 z 좌표의 조합으로 결정됩니다.
np.meshgrid는 -0.8부터 1까지 일정한 간격으로 생성된 1차원 좌표 배열을 3차원 격자(grid)로 변환해 줍니다. 이렇게 만든 격자 위의 각 점에서 벡터 성분(u, v, w)을 계산하고, quiver()에 전달하면 전체 공간에서의 컬 분포를 한눈에 파악할 수 있습니다. 물리학의 유체 역학이나 전자기학에서 회전하는 흐름이나 자기장 등을 시각화할 때 유용하게 활용되는 기법입니다.