iBetter Books
수정

"응답자 120명이고, 다섯 가지 주제 중 하나 골랐어."

하은이 데이터를 보여줬습니다. AI 기반 추천 시스템이 가장 많았고, 나머지가 고르게 분포해 있었습니다.

"비율이 중요한 거잖아. 원형 차트가 맞아."


px.pie() 기본

px.pie()valuesnames 두 파라미터를 받습니다. 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개 이하, 비율 강조 원형/도넛 차트
항목이 많거나 절대값 비교 막대 그래프
시간에 따른 비율 변화 스택 막대 그래프