Python에서 원형(극좌표) 히스토그램을 그리려면 Matplotlib의 극좌표(polar) 투영 기능을 활용하면 됩니다. 아래 단계를 따라 차근차근 구현해 보겠습니다.
구현 단계
- numpy를 사용하여 theta(각도), radii(반지름), width(막대 폭) 데이터 포인트를 생성합니다.
- plt.subplot() 메서드에 projection='polar' 옵션을 지정하여 현재 figure에 극좌표 축을 가진 서브플롯을 추가합니다.
- bar() 메서드를 사용하여 theta, radii, width 데이터로 막대 그래프를 그립니다.
- zip()으로 radii와 bars를 묶어 반복하면서 각 막대의 면 색상(facecolor)과 알파(alpha) 값을 설정합니다. 알파 값이 작을수록 막대가 더 투명해집니다.
- 마지막으로 show() 메서드를 호출하여 figure를 화면에 표시합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
# figure 크기 및 레이아웃 설정
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
N = 20
# 0부터 2π까지 N개의 각도 생성 (endpoint=False로 마지막 값 제외)
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
# 0~10 사이의 무작위 반지름 값 생성
radii = 10 * np.random.rand(N)
# 최대 π/4까지의 무작위 막대 폭 생성
width = np.pi / 4 * np.random.rand(N)
# 극좌표 투영 서브플롯 생성
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
# 반지름 값에 따라 무지개 색상과 투명도 적용
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.rainbow(r / 10.0))
bar.set_alpha(0.5)
plt.show()실행 결과
코드를 실행하면 중심점을 기준으로 방사형으로 뻗어 나가는 20개의 컬러풀한 막대가 원형으로 배치된 극좌표 히스토그램이 출력됩니다. 각 막대의 색상은 반지름 크기에 따라 무지개 팔레트(rainbow) 컬러맵에서 자동으로 할당되며, 알파 값이 0.5로 설정되어 있어 막대들이 반투명하게 겹쳐 보입니다.
핵심 포인트 정리
- projection='polar': 일직선 좌표계 대신 원형 좌표계를 사용하는 것이 이 기법의 핵심입니다.
- endpoint=False: 마지막 각도(2π)를 제외하여 첫 번째와 마지막 막대가 겹치는 것을 방지합니다.
- bottom=0.0: 막대가 중심에서부터 시작되도록 설정합니다. 이 값을 조정하면 도넛 형태의 히스토그램도 만들 수 있습니다.
- 컬러맵 활용: plt.cm.rainbow 외에도 viridis, plasma 등 다양한 컬러맵으로 시각적 효과를 바꿀 수 있습니다.
이 방법은 바람의 방향과 세기, 주기적 시간 데이터 등 방향성을 가진 데이터를 직관적으로 표현할 때 특히 유용합니다.