PieChart
recharts 기반 파이·도넛 차트 컴포넌트.
개요
첫 시리즈의 행을 조각으로 그립니다. innerRadius를 주면 도넛이 됩니다.
주요 특징
- ✅ 파이·도넛:
innerRadius로 가운데를 비운다 - ✅ 데이터 라벨:
showDataLabel,dataLabelPosition(inside·outside), 시리즈의labelKey - ✅ 숫자 서식:
thousandSeparator로 툴팁과 숫자 라벨에 구분자 - ✅ 범례 토글: 범례 항목을 눌러 조각 숨김·표시
- ✅ 컨테이너: 제목·도구·검색 폼·접기
- ✅ 빈 상태: 데이터가 없으면 안내 문구
기본 사용
series에 시리즈를 넘깁니다. 첫 시리즈만 쓰고, xKey는 항목 이름, yKey는 값 필드입니다.
Preview
도넛 (innerRadius)
% 문자열은 바깥 반지름 대비입니다("40%"면 구멍 반지름이 바깥 반지름의 0.4). 숫자는 px입니다. 기본 0이면 파이입니다. 바깥 반지름은 outerRadius(기본 "80%")로 정합니다.
Preview
범례·툴팁 끄기 (legend, tooltip)
둘 다 기본으로 켜져 있습니다.
Preview
데이터 라벨 (showDataLabel, dataLabelPosition, labelKey)
위는 기본으로 항목 이름을 조각 바깥("outside")에 씁니다. 아래는 labelKey로 note 필드를 조각 안("inside")에 쓰고, 값이 비면 값을 씁니다.
Preview
천 단위 구분자 (thousandSeparator)
툴팁과 숫자 데이터 라벨에 걸립니다. 이 예는 labelKey로 값 필드를 라벨로 씁니다.
Preview
색상 (colors)
항목 순서대로 쓰고, 모자라면 처음부터 다시 씁니다.
Preview
범례 클릭 토글 (legendToggle)
범례 항목을 누르면 그 조각을 원에서 빼고 남은 항목이 360°를 나눕니다. 숨긴 항목은 범례에 흐리게 남아 다시 누르면 돌아옵니다. 이름이 같은 항목도 따로 그리고 따로 숨기며, 범례·툴팁에는 그 이름이 그대로 보입니다. 기본으로 켜져 있고 legendToggle={false}로 끕니다.
Preview
포인트 클릭 (onPointClick)
조각을 누르면 항목 이름·인덱스, X값(항목 이름)·Y값(값), 클릭한 조각의 원본 행(payload)을 넘깁니다. payload는 series[0].data[j] 그 객체이고, 앞 항목을 범례로 숨겨도 인덱스는 원래 순서를 따릅니다.
Preview
조각을 클릭하세요
제목·도구·검색 폼 (title, actions, searchContent)
title을 주면 접고 펼 수 있는 머리가 생깁니다. actions는 머리 오른쪽에, searchContent는 차트 위 검색 폼 자리에 그립니다. 검색 폼은 24칸 격자이고 searchColumns·searchColGap·searchRowGap으로 바꿉니다. title이 없으면 actions·검색 폼·접기 props는 쓰이지 않습니다.
Preview
접기 (defaultCollapsed, collapseDisabled)
title이 있을 때 씁니다. 위는 접힌 채 시작하고, 아래는 접고 펼 수 없습니다.
Preview
빈 상태
데이터가 없으면 emptyText를 보입니다.
Preview
데이터가 없습니다
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
series | PieChartSeries<Row>[] | - | 시리즈 배열. 첫 시리즈만 쓴다 |
innerRadius | string | number | 0 | 안쪽 반지름. %는 바깥 반지름 대비, 숫자는 px. 값을 주면 도넛 |
outerRadius | string | number | "80%" | 바깥 반지름. %는 차트 영역 대비, 숫자는 px |
colors | string[] | 기본 8색 | 항목 순서대로 쓰는 색. 모자라면 처음부터 다시 쓴다 |
legend | boolean | true | 범례 표시 |
legendToggle | boolean | true | 범례 항목을 눌러 항목 숨김·표시. 숨긴 항목은 범례에 흐리게 남는다 |
tooltip | boolean | true | 툴팁 표시 |
showDataLabel | boolean | false | 데이터 라벨 표시 |
dataLabelPosition | "inside" | "outside" | "outside" | 데이터 라벨 위치 (조각 안·바깥) |
thousandSeparator | boolean | false | 천 단위 구분자. 툴팁·숫자 데이터 라벨 |
height | number | 350 | 차트 높이 (px) |
emptyText | string | "데이터가 없습니다" | 데이터가 없을 때 문구. 값이 전부 0이면 빈 상태가 아니라 조각 없이 범례만 보인다 |
onPointClick | (data: PieChartPointClickData<Row>) => void | - | 조각 클릭 콜백. payload는 원본 행 |
title | ReactNode | - | 제목. 주면 접고 펼 수 있는 머리가 생긴다 |
actions | ReactNode | - | title이 있을 때. 머리 오른쪽 도구 영역 |
defaultCollapsed | boolean | false | title이 있을 때. 접힌 채 시작 |
collapseDisabled | boolean | false | title이 있을 때. 접기·펼치기 막기 |
searchContent | ReactNode | - | title이 있을 때. 검색 폼 영역 (FormCol 등) |
searchColumns | number | 24 | title이 있을 때. 검색 폼 격자 칸 수 |
searchColGap | number | 15 | title이 있을 때. 검색 폼 가로 간격 (px) |
searchRowGap | number | 20 | title이 있을 때. 검색 폼 세로 간격 (px) |
readOnly | boolean | - | title이 있을 때. 검색 폼 읽기 전용 |
className | string | - | 차트 루트 CSS 클래스 |
style | CSSProperties | - | 차트 루트 인라인 스타일 |
PieChartSeries
| Field | Type | Required | Description |
|---|---|---|---|
data | Row[] | ✅ | 데이터 행 배열 |
xKey | string | ✅ | 항목 이름을 읽을 행 필드 키 |
yKey | string | ✅ | 값을 읽을 행 필드 키 |
name | string | - | 쓰지 않는다 (범례·툴팁은 항목 이름) |
labelKey | string | - | 데이터 라벨 문구를 읽을 행 필드 키. 값이 비면 값을 쓴다. 지정하지 않으면 항목 이름 |
PieChartPointClickData
| Field | Type | Description |
|---|---|---|
seriesName | string | 항목 이름 |
seriesIndex | number | 항목 인덱스 (숨긴 항목이 있어도 원래 순서) |
xValue | unknown | 항목 이름 |
yValue | unknown | 값 |
payload | Row | 클릭한 조각의 원본 행 (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버튼이라 키보드로 토글할 수 있다
관련 컴포넌트
- FunnelChart: 깔때기·피라미드 차트
- BarChart: 막대 차트