"응답자 120명이고, 다섯 가지 주제 중 하나 골랐어."
하은이 데이터를 보여줬습니다. AI 기반 추천 시스템이 가장 많았고, 나머지가 고르게 분포해 있었습니다.
"비율이 중요한 거잖아. 원형 차트가 맞아."
px.pie() 기본
px.pie()는 values와 names 두 파라미터를 받습니다. values는 각 조각의 크기, names는 조각의 이름입니다.
# 파일: pie_basic.pyimport plotly.express as pximport pandas as pddf = pd.DataFrame({ "topic": ["AI 추천 시스템", "스마트 팜", "헬스케어 앱", "교통 최적화", "환경 모니터링"], "count": [38, 25, 22, 19, 16]})fig = px.pie( df, values="count", names="topic", title="캡스톤 프로젝트 주제 선호도")fig.show()
각 조각에 이름과 퍼센트가 자동으로 표시됩니다. 조각을 클릭하면 해당 항목이 사라지고, 다시 클릭하면 나타납니다.
레이블 커스터마이징
textinfo 파라미터로 각 조각에 표시할 정보를 지정합니다.
# 파일: pie_label.pyimport plotly.express as pximport pandas as pddf = pd.DataFrame({ "topic": ["AI 추천 시스템", "스마트 팜", "헬스케어 앱", "교통 최적화", "환경 모니터링"], "count": [38, 25, 22, 19, 16]})fig = px.pie( df, values="count", names="topic", title="캡스톤 프로젝트 주제 선호도")fig.update_traces(textinfo="label+percent+value")fig.show()
textinfo에 +로 조합해서 사용합니다.
| 값 | 표시 내용 |
|---|---|
"label" |
이름 |
"percent" |
퍼센트 (예: 31.7%) |
"value" |
실제 값 |
"label+percent" |
이름 + 퍼센트 |
도넛 차트
hole 파라미터에 0~1 사이 값을 지정하면 가운데 구멍이 생깁니다. 일반적으로 0.4가 보기 좋습니다.
# 파일: pie_donut.pyimport plotly.express as pximport pandas as pddf = pd.DataFrame({ "topic": ["AI 추천 시스템", "스마트 팜", "헬스케어 앱", "교통 최적화", "환경 모니터링"], "count": [38, 25, 22, 19, 16]})fig = px.pie( df, values="count", names="topic", title="캡스톤 프로젝트 주제 선호도 (도넛)", hole=0.4)fig.update_traces(textinfo="label+percent")fig.show()
도넛 차트는 원형 차트보다 현대적인 느낌을 줍니다. 가운데 빈 공간에 핵심 수치나 제목을 텍스트로 추가할 수도 있습니다.
pull로 특정 조각 분리
특정 항목을 강조하고 싶을 때는 pull 파라미터로 해당 조각을 바깥으로 당깁니다. pull은 각 조각에 대한 값 리스트이고, 0이면 그대로, 0.1이면 10% 바깥으로 이동합니다.
# 파일: pie_pull.pyimport plotly.express as pximport pandas as pddf = pd.DataFrame({ "topic": ["AI 추천 시스템", "스마트 팜", "헬스케어 앱", "교통 최적화", "환경 모니터링"], "count": [38, 25, 22, 19, 16]})fig = px.pie( df, values="count", names="topic", title="캡스톤 프로젝트 주제 선호도 (1위 강조)")fig.update_traces( textinfo="label+percent", pull=[0.1, 0, 0, 0, 0] # 첫 번째 조각(AI 추천 시스템)만 분리)fig.show()
리스트 순서는 데이터프레임의 행 순서와 일치합니다. 강조할 항목의 인덱스에만 0보다 큰 값을 넣습니다.
실전: 하은의 설문조사 차트
하은이 최종 차트를 요청했습니다. 1위 항목을 강조하고, 범례는 오른쪽에 두고 싶다고 했습니다.
# 파일: survey_pie_final.pyimport plotly.express as pximport pandas as pddf = pd.DataFrame({ "topic": ["AI 추천 시스템", "스마트 팜", "헬스케어 앱", "교통 최적화", "환경 모니터링"], "count": [38, 25, 22, 19, 16]})fig = px.pie( df, values="count", names="topic", title="캡스톤 프로젝트 주제 선호도 (n=120)", hole=0.35)fig.update_traces( textinfo="label+percent", pull=[0.08, 0, 0, 0, 0], textfont_size=13)fig.update_layout( legend=dict( orientation="v", x=1.02, y=0.5 ))fig.show()
하은이 차트를 보고 고개를 끄덕였습니다.
"AI 추천 시스템이 확실히 튀네. 이걸로 발표할게."
원형 차트 사용 시 주의점
원형 차트는 조각이 5~6개를 넘어가면 각 조각의 크기 차이를 구분하기 어려워집니다. 항목이 많을 때는 막대 그래프가 더 정확한 비교를 제공합니다.
| 상황 | 추천 차트 |
|---|---|
| 항목이 5개 이하, 비율 강조 | 원형/도넛 차트 |
| 항목이 많거나 절대값 비교 | 막대 그래프 |
| 시간에 따른 비율 변화 | 스택 막대 그래프 |