LineChart
recharts 기반 라인 차트 컴포넌트.
개요
시리즈 데이터를 선으로 연결합니다. 기본은 직선(linear) 보간이고, curve로 곡선 종류를 고릅니다.
주요 특징
- ✅ 다중 시리즈: 시리즈마다 선 하나. 여러 시리즈의 같은 x는 한 위치에 그리고, 한 시리즈 안의 같은 x는 따로 그린다. 이름이 같은 시리즈도 따로 그리고 따로 숨기며, 범례·툴팁에는 그 이름이 그대로 보인다
- ✅ 곡선:
curve로 linear·natural·monotone 등 recharts 곡선 종류 지정 - ✅ 마커·데이터 라벨:
showDot,showDataLabel,dataLabelPosition, 시리즈별labelKey - ✅ 숫자 서식:
thousandSeparator, 축 눈금 포맷터 - ✅ 범례 토글: 범례 항목을 눌러 시리즈 숨김·표시
- ✅ 컨테이너: 제목·도구·검색 폼·접기
- ✅ 빈 상태·음수: 데이터가 없으면 안내 문구, 음수면 값 축이 0을 지나도록 넓어진다
기본 사용
series에 시리즈 배열을 넘깁니다. 각 시리즈는 행 배열(data)과 X·Y 값을 읽을 필드 키(xKey, yKey)를 가집니다.
Preview
곡선 (curve)
같은 데이터를 세 곡선으로 그립니다. linear(기본)는 점을 직선으로 잇습니다. natural은 전체를 부드럽게 잇지만 값이 급하게 바뀌는 곳에서 실제 값보다 넘칩니다(3~4월이 0 아래로 내려갑니다). monotone은 점 사이에서 값 범위를 넘지 않아 없는 봉우리나 음수 구간이 생기지 않습니다. 곡선 종류는 recharts 곡선을 그대로 받습니다.
Preview
curve="linear"
curve="natural"
curve="monotone"
범례·툴팁 끄기 (legend, tooltip)
둘 다 기본으로 켜져 있습니다.
Preview
마커 숨기기 (showDot)
점 마커는 기본으로 보입니다. showDot={false}면 선만 그립니다.
Preview
데이터 라벨 (showDataLabel, dataLabelPosition)
점마다 값을 씁니다. 위치는 "top"(기본)·"bottom"·"center" 중에서 고릅니다.
Preview
데이터 라벨 문구 (labelKey)
시리즈에 labelKey를 주면 그 필드를 라벨로 씁니다. 값이 비면 Y값을 씁니다.
Preview
천 단위 구분자 (thousandSeparator)
값 축 눈금, 숫자 데이터 라벨, 툴팁에 함께 걸립니다. 축 포맷터를 주면 축은 그쪽이 우선합니다.
Preview
축 눈금 서식 (xAxisTickFormatter, yAxisTickFormatter)
범주 축과 값 축의 눈금 문구를 바꿉니다.
Preview
축별 격자 (showXAxisGrid, showYAxisGrid)
X축(범주 축) 격자는 세로선, Y축(값 축) 격자는 가로선입니다. 둘 다 기본으로 보입니다. 이 예는 세로선만 숨깁니다.
Preview
색상 (colors)
시리즈 순서대로 쓰고, 모자라면 처음부터 다시 씁니다.
Preview
범례 클릭 토글 (legendToggle)
범례 항목을 누르면 시리즈를 숨기고, 다시 누르면 보입니다. 숨긴 항목은 범례에 흐리게 남습니다. 이름이 같은 시리즈도 따로 숨깁니다. 시리즈 구성이 바뀌어 같은 자리에 이름이 다른 시리즈가 오면 숨김이 풀립니다. 기본으로 켜져 있고 legendToggle={false}로 끕니다.
Preview
포인트 클릭 (onPointClick)
점(마우스를 올리면 나타나는 활성 점)을 누르면 시리즈 이름·인덱스, X·Y값, 클릭한 점의 원본 행(payload)을 넘깁니다. payload는 series[i].data[j] 그 객체라 차트가 쓰지 않는 필드도 그대로 들어 있습니다.
Preview
점을 클릭하세요
제목·도구·검색 폼 (title, actions, searchContent)
title을 주면 접고 펼 수 있는 머리가 생깁니다. actions는 머리 오른쪽에, searchContent는 차트 위 검색 폼 자리에 그립니다. 검색 폼은 24칸 격자이고 searchColumns·searchColGap·searchRowGap으로 바꿉니다. title이 없으면 actions·검색 폼·접기 props는 쓰이지 않습니다.
Preview
접기 (defaultCollapsed, collapseDisabled)
title이 있을 때 씁니다. 위는 접힌 채 시작하고, 아래는 접고 펼 수 없습니다.
Preview
음수 데이터
값 축이 음수까지 넓어지고 0 눈금을 지납니다. 양 끝에 여유를 두어 끝 라벨이 잘리지 않습니다.
Preview
빈 상태
데이터가 없으면 emptyText를 보입니다.
Preview
데이터가 없습니다
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
series | LineChartSeries<Row>[] | - | 시리즈 배열 |
curve | recharts CurveType | "linear" | 곡선 종류. "natural"·"monotone" 등 |
showDot | boolean | true | 점 마커 표시 |
colors | string[] | 기본 8색 | 시리즈 순서대로 쓰는 색. 모자라면 처음부터 다시 쓴다 |
legend | boolean | true | 범례 표시 |
legendToggle | boolean | true | 범례 항목을 눌러 시리즈 숨김·표시. 숨긴 항목은 범례에 흐리게 남는다 |
tooltip | boolean | true | 툴팁 표시 |
showDataLabel | boolean | false | 데이터 라벨 표시 |
dataLabelPosition | "top" | "bottom" | "center" | "top" | 데이터 라벨 위치 (점 기준) |
thousandSeparator | boolean | false | 천 단위 구분자. 값 축 눈금·숫자 데이터 라벨·툴팁 (축 포맷터가 우선) |
xAxisTickFormatter | (value: string) => string | - | 범주 축 눈금 서식 |
yAxisTickFormatter | (value: number) => string | - | 값 축 눈금 서식 |
showXAxisGrid | boolean | true | 범주 축 격자선 (세로선) |
showYAxisGrid | boolean | true | 값 축 격자선 (가로선) |
height | number | 350 | 차트 높이 (px) |
emptyText | string | "데이터가 없습니다" | 데이터가 없을 때 문구 |
onPointClick | (data: LineChartPointClickData<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 | - | 차트 루트 인라인 스타일 |
LineChartSeries
| Field | Type | Required | Description |
|---|---|---|---|
data | Row[] | ✅ | 데이터 행 배열 |
xKey | string | ✅ | X값을 읽을 행 필드 키 |
yKey | string | ✅ | Y값을 읽을 행 필드 키 |
name | string | - | 시리즈 이름 (범례·툴팁). 없으면 yKey. 표시용이라 이름이 같아도 된다 |
labelKey | string | - | 데이터 라벨 문구를 읽을 행 필드 키. 값이 비면 Y값을 쓴다 |
LineChartPointClickData
| Field | Type | Description |
|---|---|---|
seriesName | string | 시리즈 이름 |
seriesIndex | number | 시리즈 인덱스 |
xValue | unknown | 클릭한 점의 X값 |
yValue | unknown | 클릭한 점의 Y값 |
payload | Row | 클릭한 점의 원본 행 (series[i].data[j] 그 객체. 차트가 쓰지 않는 필드도 그대로) |
행 타입 (Row)
Props·Series·PointClickData는 행 타입 Row를 받습니다(기본 Record<string, unknown>). series의 data에서 추론되므로 onPointClick의 payload를 형 변환 없이 읽을 수 있습니다.
type SalesRow = { month: string; sales: number; code: string }
const rows: SalesRow[] = [/* … */]
<LineChart
series={[{ data: rows, xKey: "month", yKey: "sales" }]}
onPointClick={(d) => openDetail(d.payload.code)} // d.payload: SalesRow
/>접근성
권장 사항
- ✅ recharts
accessibilityLayer자동 활성화 - ✅ 빈 차트 시 대체 텍스트(emptyText) 제공
- ✅ 범례 항목은
aria-pressed버튼이라 키보드로 토글할 수 있다