Skip to Content

PieChart

recharts 기반 파이·도넛 차트 컴포넌트.


개요

첫 시리즈의 행을 조각으로 그립니다. innerRadius를 주면 도넛이 됩니다.

주요 특징

  • ✅ 파이·도넛: innerRadius로 가운데를 비운다
  • ✅ 데이터 라벨: showDataLabel, dataLabelPosition(inside·outside), 시리즈의 labelKey
  • ✅ 숫자 서식: thousandSeparator로 툴팁과 숫자 라벨에 구분자
  • ✅ 범례 토글: 범례 항목을 눌러 조각 숨김·표시
  • ✅ 컨테이너: 제목·도구·검색 폼·접기
  • ✅ 빈 상태: 데이터가 없으면 안내 문구

기본 사용

series에 시리즈를 넘깁니다. 첫 시리즈만 쓰고, xKey는 항목 이름, yKey는 값 필드입니다.


도넛 (innerRadius)

% 문자열은 바깥 반지름 대비입니다("40%"면 구멍 반지름이 바깥 반지름의 0.4). 숫자는 px입니다. 기본 0이면 파이입니다. 바깥 반지름은 outerRadius(기본 "80%")로 정합니다.


범례·툴팁 끄기 (legend, tooltip)

둘 다 기본으로 켜져 있습니다.


데이터 라벨 (showDataLabel, dataLabelPosition, labelKey)

위는 기본으로 항목 이름을 조각 바깥("outside")에 씁니다. 아래는 labelKey로 note 필드를 조각 안("inside")에 쓰고, 값이 비면 값을 씁니다.


천 단위 구분자 (thousandSeparator)

툴팁과 숫자 데이터 라벨에 걸립니다. 이 예는 labelKey로 값 필드를 라벨로 씁니다.


색상 (colors)

항목 순서대로 쓰고, 모자라면 처음부터 다시 씁니다.


범례 클릭 토글 (legendToggle)

범례 항목을 누르면 그 조각을 원에서 빼고 남은 항목이 360°를 나눕니다. 숨긴 항목은 범례에 흐리게 남아 다시 누르면 돌아옵니다. 이름이 같은 항목도 따로 그리고 따로 숨기며, 범례·툴팁에는 그 이름이 그대로 보입니다. 기본으로 켜져 있고 legendToggle={false}로 끕니다.


포인트 클릭 (onPointClick)

조각을 누르면 항목 이름·인덱스, X값(항목 이름)·Y값(값), 클릭한 조각의 원본 행(payload)을 넘깁니다. payload는 series[0].data[j] 그 객체이고, 앞 항목을 범례로 숨겨도 인덱스는 원래 순서를 따릅니다.

조각을 클릭하세요

제목·도구·검색 폼 (title, actions, searchContent)

title을 주면 접고 펼 수 있는 머리가 생깁니다. actions는 머리 오른쪽에, searchContent는 차트 위 검색 폼 자리에 그립니다. 검색 폼은 24칸 격자이고 searchColumns·searchColGap·searchRowGap으로 바꿉니다. title이 없으면 actions·검색 폼·접기 props는 쓰이지 않습니다.


접기 (defaultCollapsed, collapseDisabled)

title이 있을 때 씁니다. 위는 접힌 채 시작하고, 아래는 접고 펼 수 없습니다.


빈 상태

데이터가 없으면 emptyText를 보입니다.

데이터가 없습니다


API Reference

Props

PropTypeDefaultDescription
seriesPieChartSeries<Row>[]-시리즈 배열. 첫 시리즈만 쓴다
innerRadiusstring | number0안쪽 반지름. %는 바깥 반지름 대비, 숫자는 px. 값을 주면 도넛
outerRadiusstring | number"80%"바깥 반지름. %는 차트 영역 대비, 숫자는 px
colorsstring[]기본 8색항목 순서대로 쓰는 색. 모자라면 처음부터 다시 쓴다
legendbooleantrue범례 표시
legendTogglebooleantrue범례 항목을 눌러 항목 숨김·표시. 숨긴 항목은 범례에 흐리게 남는다
tooltipbooleantrue툴팁 표시
showDataLabelbooleanfalse데이터 라벨 표시
dataLabelPosition"inside" | "outside""outside"데이터 라벨 위치 (조각 안·바깥)
thousandSeparatorbooleanfalse천 단위 구분자. 툴팁·숫자 데이터 라벨
heightnumber350차트 높이 (px)
emptyTextstring"데이터가 없습니다"데이터가 없을 때 문구. 값이 전부 0이면 빈 상태가 아니라 조각 없이 범례만 보인다
onPointClick(data: PieChartPointClickData<Row>) => void-조각 클릭 콜백. payload는 원본 행
titleReactNode-제목. 주면 접고 펼 수 있는 머리가 생긴다
actionsReactNode-title이 있을 때. 머리 오른쪽 도구 영역
defaultCollapsedbooleanfalsetitle이 있을 때. 접힌 채 시작
collapseDisabledbooleanfalsetitle이 있을 때. 접기·펼치기 막기
searchContentReactNode-title이 있을 때. 검색 폼 영역 (FormCol 등)
searchColumnsnumber24title이 있을 때. 검색 폼 격자 칸 수
searchColGapnumber15title이 있을 때. 검색 폼 가로 간격 (px)
searchRowGapnumber20title이 있을 때. 검색 폼 세로 간격 (px)
readOnlyboolean-title이 있을 때. 검색 폼 읽기 전용
classNamestring-차트 루트 CSS 클래스
styleCSSProperties-차트 루트 인라인 스타일

PieChartSeries

FieldTypeRequiredDescription
dataRow[]✅데이터 행 배열
xKeystring✅항목 이름을 읽을 행 필드 키
yKeystring✅값을 읽을 행 필드 키
namestring-쓰지 않는다 (범례·툴팁은 항목 이름)
labelKeystring-데이터 라벨 문구를 읽을 행 필드 키. 값이 비면 값을 쓴다. 지정하지 않으면 항목 이름

PieChartPointClickData

FieldTypeDescription
seriesNamestring항목 이름
seriesIndexnumber항목 인덱스 (숨긴 항목이 있어도 원래 순서)
xValueunknown항목 이름
yValueunknown값
payloadRow클릭한 조각의 원본 행 (series[0].data[j] 그 객체. 차트가 쓰지 않는 필드도 그대로)

행 타입 (Row)

Props·Series·PointClickData는 행 타입 Row를 받습니다(기본 Record<string, unknown>). series의 data에서 추론되므로 onPointClick의 payload를 형 변환 없이 읽을 수 있습니다.

type SalesRow = { category: string; value: number; code: string } const rows: SalesRow[] = [/* … */] <PieChart series={[{ data: rows, xKey: "category", yKey: "value" }]} onPointClick={(d) => openDetail(d.payload.code)} // d.payload: SalesRow />

접근성

권장 사항

  • ✅ recharts accessibilityLayer 자동 활성화
  • ✅ 빈 차트 시 대체 텍스트(emptyText) 제공
  • ✅ 범례 항목은 aria-pressed 버튼이라 키보드로 토글할 수 있다

관련 컴포넌트

Last updated on