FNA Design System

Data Visualization

형태를 먼저 고르고 색은 마지막에, 색은 계산해서 검증합니다. 온도 추세선·CCP 분포·결재 도넛·히트맵 — 모든 차트는 표 보기 쌍둥이를 가집니다.

014274154월화수목금47토일12월: 42화: 38수: 45목: 40금: 47토: 21일: 12

형태 고르기 (색보다 먼저)

읽는 사람이 해야 할 일형태색 역할
지금 값 하나 (+추세)스탯 타일 (값·증감·12점 스파크라인). 막대 1개짜리 차트 금지스파크라인은 회색, 마지막 점만 primary
시간에 따른 온도추세선계열 1~3색, 기준 밴드·이탈 구간은 상태색 워시
하루 단위 건수세로 막대한 계열이면 전부 series-1. 값이 크다고 진하게 칠하지 않는다
합격/불합격 분포가로 스택 막대. 2조각 파이 금지ok / nonconform 두 색
결재 진행도넛(전체, ≤6조각) + 100% 스택(사업장별)결재 6색, approvalOrder 순
센서 × 시간 온도히트맵순차형 파랑 100~700. 임계 초과는 값 라벨 + 표 보기로
편차 · 목표 대비발산 막대 / 기준선 대비 선파랑 = 저온·미달, 빨강 = 고온·초과, 가운데 회색

금지: 이중 Y축 · 8색 초과 · 무지개 순차형 · 발산 중간에 색상 · 모든 점에 숫자 · 툴팁으로만 읽을 수 있는 값 · 스켈레톤 깜빡임.

팔레트

범주 8계열 — 순서 고정

1 파랑 · 2 주황 · 3 청록 · 4 노랑 · 5 분홍 · 6 녹색 · 7 보라 · 8 빨강
1#2a78d6#3987e5
2#eb6834#d95926
3#1baf7a#199e70
4#eda100#c98500
5#e87ba4#d55181
6#008300#008300
7#4a3aa7#9085e9
8#e34948#e66767

인접 쌍 CVD ΔE 라이트 9.1 / 다크 8.4 (기준 ≥ 8), 정상시력 19.6 / 19.3 (기준 ≥ 15) — 통과. 색은 개체를 따라간다: 필터로 계열이 빠져도 남은 계열 색은 그대로. 산점·히트맵 범례처럼 어떤 두 색이든 맞닿는 형태는 3계열까지.

순차 · 발산

순차 — 이산 단계로 쓸 때는 300~700 만 (100·200 은 배경 대비 2:1 미만)
100#cde2fb#14305a
200#9ec5f4#1a4a8c
300#6da7ec#2a6bc4
400#3987e5#3987e5
500#256abf#6da7ec
600#184f95#9ec5f4
700#0d366b#cde2fb
발산 — 팔마다 4단계, 양팔 같은 단계 수
neg-4#1c5cab#86b6ef
neg-3#2a78d6#5598e7
neg-2#6da7ec#2a78d6
neg-1#b7d3f6#1c5cab
mid#e9ecf2#333b52
pos-1#f7c5c4#7f1d1d
pos-2#ee8f8e#b8302f
pos-3#e34948#e34948
pos-4#b8302f#f09a99

상태 · 결재

토큰라이트다크용도
--fna-chart-status-ok#059669#34d399정상 (success)
--fna-chart-status-caution#d97706#fbbf24주의 (warning)
--fna-chart-status-alarm#b91c1c#f87171경보 (라이트는 danger.text)
--fna-chart-status-nonconform#ba1a1a#ef4444부적합 (다크는 차트 전용 #ef4444)
--fna-chart-status-review#7c3aed#a78bfa검토
--fna-chart-status-info#003d9b#b2c5ff확인
--fna-chart-status-off#8791a9#6b7590미수신
--fna-chart-approval-none#c3c6d6#3d4a6c미작성 (연회색 — 라벨 필수)
--fna-chart-approval-draft#8791a9#6b7590작성 중
--fna-chart-approval-review-requested#d97706#fbbf24검토 대기
--fna-chart-approval-reviewed#7c3aed#a78bfa승인 대기
--fna-chart-approval-approved#059669#34d399승인 완료
--fna-chart-approval-rejected#ba1a1a#ef4444반려

경보와 부적합을 한 차트에 계열로 같이 두지 않는다(같은 빨강 계열, ΔE 7.5). 상태색은 상태를 뜻할 때만 쓰고 계열 4번 대용으로 쓰지 않는다. 정상↔주의는 protan ΔE 7.9 이므로 상태 차트는 항상 아이콘·라벨 동반.

크롬

토큰라이트다크용도
--fna-chart-grid#e6e9f1#232c44격자 — 배경보다 한 단계 진한 실선 헤어라인 (점선 금지)
--fna-chart-axis#c3c6d6#3d4a6c축선 1px. 위·오른쪽 테두리 없음
--fna-chart-tick#5f6a86#9aa4bd눈금 글자 11px (폰 10px)
--fna-chart-label#434c66#c3c9da축 제목·직접 라벨
--fna-chart-legend#434c66#c3c9da범례
--fna-chart-tooltip-bg#1a2340#2b3654툴팁 배경
--fna-chart-tooltip-text#ffffff#e6eaf5툴팁 글자
--fna-chart-bandrgba(217,119,6,.14)rgba(251,191,36,.16)기준 상한~하한 밴드 (주의색 14% 워시)
--fna-chart-band-line#d97706#fbbf24밴드 경계 1px 점선 (임계선은 점선 허용)
--fna-chart-deviationrgba(220,38,38,.14)rgba(248,113,113,.18)이탈 구간 세로 띠 (경보색 14% 워시)
--fna-chart-muted#b8bfd0#55607e비강조 계열 · 스파크라인
--fna-chart-empty#5f6a86#9aa4bd빈 상태 글자

차트별 규칙

온도 추세선

센서별 계열 · 기준 밴드(−22~−15℃) · 이탈 구간 강조 · 직접 라벨(≤3계열)
-25-20-15-10-50506:0007:0008:0009:0010:0011:0012:00냉동창고 A냉동창고 B
  • 계열: 센서 ≤3 이면 직접 라벨(선 끝), 4~6 이면 범례, 그 이상은 소형 다중.
  • Y축 깨끗한 정수(℃), 눈금 4~7개. X축 시각(HH:mm) 5~6개(폰 3~4개).
  • 이탈 점은 status-alarm 마커(지름 8, 배경 링 2px). 이탈 건수는 제목 옆 배지.
  • 상호작용: 세로 크로스헤어가 가장 가까운 시각에 스냅, 툴팁 하나에 모든 계열 값(값 굵게, 계열명 보조). 키보드 포커스 시 같은 내용.

일별 막대 · 스파크라인

막대 ≤24px, 위만 4px 라운드, 한 계열 = 전부 series-1, 값 라벨은 최댓값·오늘만
014274154월화수목금47토일12월: 42화: 38수: 45목: 40금: 47토: 21일: 12

CCP 합격/불합격

라인별 가로 스택 — 적합 → 부적합 → 기록 없음, 막대 끝에 총 건수 · 부적합 건수
1라인적합 118부적합 2120 · 22라인적합 96963라인적합 74부적합 5기록 없음 382 · 5
적합부적합기록 없음

결재 진행

도넛(가운데 수치 하나) + 사업장별 100% 스택 — 순서 반려 → 미작성 → 작성 중 → 검토 대기 → 승인 대기 → 승인 완료
반려 2미작성 3작성 중 4검토 대기 6승인 대기 5승인 완료 3262%승인 완료
반려 2미작성 3작성 중 4검토 대기 6승인 대기 5승인 완료 32
평택공장반려 1미작성 1작성 중 2검토 대기 3승인 대기 2승인 완료 1120안성공장미작성 2작성 중 1검토 대기 2승인 대기 1승인 완료 1218음성공장반려 1작성 중 1검토 대기 1승인 대기 2승인 완료 914
반려미작성작성 중검토 대기승인 대기승인 완료

히트맵

센서 × 시간 — 순차 100~700 등간격 7단계, 셀 간격 2px, 하단 스케일 범례
000204060810121416182022냉동 A냉동 B냉장 1냉장 2전처리
-20.6℃12.4℃

마크 상수

상수값규칙
--fna-chart-line-width2px선. 스파크라인 1.5px
--fna-chart-marker-r4px점 지름 8 + 배경색 링 2px
--fna-chart-bar-max24px막대 최대 폭. 데이터 끝만 4px 라운드
--fna-chart-gap2px맞닿는 채움 사이 배경색 간격
--fna-chart-area-opacity.1면 채움 워시
높이 --fna-chart-h170 / 220 / 260폰 / 태블릿 / 데스크톱

표 보기 쌍둥이

모든 차트는 같은 데이터를 .fna-table 로 보여주는 "표" 토글을 카드 머리에 둡니다. 툴팁은 보조일 뿐이며, 라이트에서 배경 대비 3:1 미만인 청록·노랑·분홍 계열은 직접 라벨 또는 표 보기가 필수입니다.

차트 카드 머리의 차트/표 토글

냉동창고 온도 이탈 1

-25-20-15-1009:0010:0011:0012:00냉동창고 A

Do · Don't

014274154월화수목금47토일12월: 42화: 38수: 45목: 40금: 47토: 21일: 12
Do 한 계열 = 한 색, 값 라벨은 필요한 곳만
42384540472112
Don't 값 크기에 따라 진하게 · 모든 점에 숫자색이 두 가지 뜻을 갖게 된다

접근성

  • SVG 에 role="img" + aria-label(무엇을 보여주는 차트인지 한 문장). 표 보기가 스크린리더용 대체다.
  • 글자는 항상 텍스트 토큰. 계열 색으로 글자를 칠하지 않는다(직접 라벨 예외: 3:1 이상 계열만).
  • 색만으로 구분하지 않는다: 상태 차트는 아이콘·라벨, 스택은 값 라벨, 히트맵은 셀 값.
  • 툴팁은 키보드 포커스로도 열린다. 폰에서는 탭으로 표시, 차트 밖 탭으로 닫힘.

코드

<div class="fna-chart">
  <svg viewBox="0 0 640 260" role="img" aria-label="냉동창고 A·B 온도 추세 (6시간)">
    <rect class="band" …/>                 <!-- 기준 밴드 -->
    <rect class="deviation" …/>            <!-- 이탈 구간 -->
    <g class="grid"><line …/></g>
    <g class="axis"><path d="M40,12V232H624"/></g>
    <text class="tick" …>-15</text>
    <path class="line fna-series-1" d="…"/>
    <circle class="marker fna-series-alarm" r="4" …/>
  </svg>
  <div class="fna-chart__legend"><span class="fna-series-1"><i></i>냉동창고 A</span></div>
</div>
/* RN */ import {CHART, DARK_CHART, CHART_MARK} from './theme/tokens'; CHART.series[0] …

안정마지막 갱신 담당 디자인시스템 TF · jjo831@farmzone.kr소스 docs/dataviz.md · tokens.json chart.* · scripts/validate_palette.mjsFoundations · FNA 디자인 시스템 v1.0