소개
가장 좋아하는 차트 유형이 무엇인지 물어본다면 어떨까요? 경영진이나 비즈니스 애널리스트에게 이 질문을 던지면 십중팔구 '파이 차트(Pie Chart)'라는 답이 돌아옵니다. 파이 차트는 비율과 백분율을 직관적으로 보여주는 가장 보편적인 시각화 방식이기 때문입니다.
이 글에서는 파이썬의 Matplotlib 라이브러리를 사용해 파이 차트를 그리는 방법을 단계별로 살펴보고, 나아가 특정 조각을 분리(explode)하여 강조하는 방법까지 다룹니다.
1. 환경 준비하기
먼저 아래 명령어로 Matplotlib를 설치합니다.
pip install matplotlib
설치가 완료되면 pyplot 모듈을 임포트합니다. 관례상 plt라는 별칭을 사용합니다.
import matplotlib.pyplot as plt
2. 데이터 준비하기
예제로 테니스 선수별 그랜드슬램 우승 횟수 데이터를 사용해 보겠습니다. 선수 이름과 타이틀 수를 튜플 형태로 준비합니다.
tennis_stats = (('Federer', 20), ('Nadal', 20), ('Djokovic', 17), ('Murray', 3))그다음 이 데이터를 차트에 쓸 수 있도록 값(타이틀 수)과 레이블(선수 이름) 리스트로 분리합니다.
titles = [title for player, title in tennis_stats] players = [player for player, title in tennis_stats]
3. 기본 파이 차트 그리기
plt.pie() 함수에 값과 레이블을 전달하면 기본적인 파이 차트가 완성됩니다.
- autopct 매개변수: 각 조각의 값을 소수점 첫째 자리까지의 백분율로 표시해 줍니다.
- axis('equal'): 파이 차트가 찌그러지지 않고 완전한 원형으로 보이도록 해줍니다.
plt.pie(titles, labels=players, autopct='%1.1f%%')
plt.gca().axis('equal')
plt.show()참고: .show()를 실행하면 프로그램 실행이 일시적으로 멈춥니다. 창을 닫아야 프로그램이 계속 진행되므로 주의하세요.
4. 시작 각도와 방향 조절하기
파이 차트를 더 세련되게 만들고 싶다면 몇 가지 흥미로운 매개변수를 활용할 수 있습니다.
- startangle: 첫 번째 조각이 시작되는 각도를 회전시킵니다.
- counterclock: 조각이 그려지는 방향을 설정합니다. 기본값은 True(반시계 방향)이며, False로 지정하면 시계 방향으로 그려집니다.
plt.pie(titles, labels=players, startangle=60, counterclock=False, autopct='%1.1f%%') plt.show()
5. 백분율 대신 실제 값 표시하기
백분율만으로는 부족할 때가 있습니다. 차트를 받아보는 사람은 코드 속에 숨겨진 원래 값을 알 수 없기 때문입니다. 조각의 크기만 봐도 비율은 자명하니, 차라리 실제 값(우승 횟수)을 직접 표시하는 것이 더 유용할 수 있습니다.
이를 위해서는 사용자 정의 함수가 필요합니다. 백분율을 키로 하는 딕셔너리를 만들어 두면, 전달된 백분율에 해당하는 원래 값을 쉽게 조회할 수 있습니다.
total = sum(title for player, title in tennis_stats)
print(total) # 60
values = {int(100 * title / total): title for player, title in tennis_stats}
print(values) # {33: 20, 28: 17, 5: 3}
def format_values(percent, **kwargs):
value = values[int(percent)]
return '{}'.format(value)6. explode로 특정 조각 강조하기
explode 매개변수를 사용하면 원하는 조각을 파이 중심에서 분리해 눈에 띄게 강조할 수 있습니다. 값이 클수록 해당 조각이 더 멀리 분리됩니다.
# Djokovic 조각을 0.1만큼 분리 explode = (0, 0, 0.1, 0.0) plt.pie(titles, labels=players, explode=explode, autopct=format_values) plt.show() # Federer와 Nadal 조각을 더 크게 분리 explode = (0.3, 0.2, 0.0, 0.0) plt.pie(titles, labels=players, explode=explode, autopct=format_values)
7. 전체 코드 정리
지금까지 배운 내용을 모두 합치면 다음과 같습니다.
# 임포트
import matplotlib.pyplot as plt
# 데이터 준비
tennis_stats = (('Federer', 20), ('Nadal', 20), ('Djokovic', 17), ('Murray', 3))
titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]
total = sum(title for player, title in tennis_stats)
values = {int(100 * title / total): title for player, title in tennis_stats}
# 사용자 정의 함수: 백분율을 실제 값으로 변환
def format_values(percent, **kwargs):
value = values[int(percent)]
return '{}'.format(value)
# explode로 Djokovic 조각 강조
explode = (0, 0, 0.1, 0.0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)
plt.show()마무리
이렇게 Matplotlib를 활용하면 기본 파이 차트부터 시작 각도 조절, 실제 값 표시, 특정 조각 강조까지 자유롭게 구현할 수 있습니다. startangle, counterclock, explode, autopct 같은 매개변수들을 적절히 조합하면 발표 자료나 보고서에서 한눈에 들어오는 고품질 차트를 만들 수 있습니다.