Python의 Matplotlib 라이브러리를 활용하면 다각형 형태의 레이더(거미) 차트를 손쉽게 만들 수 있습니다. 이 글에서는 극좌표(polar) 축을 사용해 스포츠 능력치 데이터를 시각화하는 전체 과정을 단계별로 살펴보겠습니다.
구현 단계
그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
sports(종목)와 values(값) 두 개의 열을 가진 Pandas 데이터프레임을 생성합니다.
새 그림을 생성하거나 기존 그림을 활성화합니다.
서브플롯 배치의 일부로 그림에 'ax'(극좌표 축 객체)를 추가합니다.
데이터프레임 값에 기반하여 각도(theta) 값을 계산합니다.
데이터프레임의 값 리스트를 가져옵니다.
theta와 values 데이터 포인트로 선 그래프를 그려 다각형의 테두리를 만듭니다.
fill() 메서드로 다각형 내부 영역을 반투명하게 채웁니다.
show() 메서드를 사용해 최종 그림을 화면에 표시합니다.
예제 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame({'sports': ['Strength', 'Speed', 'Power', 'Agility', 'Endurance', 'Analytical Aptitude'], 'values': [7, 8, 6, 10, 8, 9]})
fig = plt.figure()
ax = fig.add_subplot(111, projection="polar")
theta = np.arange(len(df) + 1) / float(len(df)) * 2 * np.pi
values = df['values'].values
values = np.append(values, values[0])
l1, = ax.plot(theta, values, color="purple", marker="o", label="Name of values")
ax.tick_params(pad=10)
ax.fill(theta, values, 'green', alpha=0.3)
plt.show()
코드 핵심 포인트
여기서 중요한 부분은 theta 값의 계산입니다. np.arange(len(df) + 1)를 사용해 데이터 개수보다 하나 더 많은 각도를 생성하고, 이를 2 * np.pi(360도)에 비율에 맞게 곱합니다. 마지막 지점을 첫 번째 값으로 되돌리기 위해 np.append(values, values[0])로 첫 값을 끝에 추가하는데, 이렇게 해야 다각형이 닫힌 형태로 완성됩니다.
실행 결과
위 코드를 실행하면 여섯 개 종목(근력, 속도, 파워, 민첩성, 지구력, 분석력)의 능력치가 닫힌 다각형 형태로 표현된 레이더 차트가 생성됩니다. 보라색 선과 원형 마커가 각 항목의 값을 나타내고, 초록색 반투명 영역(alpha=0.3)이 다각형 내부를 채워 데이터를 한눈에 파악하기 쉽게 만들어 줍니다.
