Data Visualization
형태를 먼저 고르고 색은 마지막에, 색은 계산해서 검증합니다. 온도 추세선·CCP 분포·결재 도넛·히트맵 — 모든 차트는 표 보기 쌍둥이를 가집니다.
형태 고르기 (색보다 먼저)
| 읽는 사람이 해야 할 일 | 형태 | 색 역할 |
|---|---|---|
| 지금 값 하나 (+추세) | 스탯 타일 (값·증감·12점 스파크라인). 막대 1개짜리 차트 금지 | 스파크라인은 회색, 마지막 점만 primary |
| 시간에 따른 온도 | 추세선 | 계열 1~3색, 기준 밴드·이탈 구간은 상태색 워시 |
| 하루 단위 건수 | 세로 막대 | 한 계열이면 전부 series-1. 값이 크다고 진하게 칠하지 않는다 |
| 합격/불합격 분포 | 가로 스택 막대. 2조각 파이 금지 | ok / nonconform 두 색 |
| 결재 진행 | 도넛(전체, ≤6조각) + 100% 스택(사업장별) | 결재 6색, approvalOrder 순 |
| 센서 × 시간 온도 | 히트맵 | 순차형 파랑 100~700. 임계 초과는 값 라벨 + 표 보기로 |
| 편차 · 목표 대비 | 발산 막대 / 기준선 대비 선 | 파랑 = 저온·미달, 빨강 = 고온·초과, 가운데 회색 |
금지: 이중 Y축 · 8색 초과 · 무지개 순차형 · 발산 중간에 색상 · 모든 점에 숫자 · 툴팁으로만 읽을 수 있는 값 · 스켈레톤 깜빡임.
팔레트
범주 8계열 — 순서 고정
1
#2a78d6#3987e52
#eb6834#d959263
#1baf7a#199e704
#eda100#c985005
#e87ba4#d551816
#008300#0083007
#4a3aa7#9085e98
#e34948#e66767인접 쌍 CVD ΔE 라이트 9.1 / 다크 8.4 (기준 ≥ 8), 정상시력 19.6 / 19.3 (기준 ≥ 15) — 통과. 색은 개체를 따라간다: 필터로 계열이 빠져도 남은 계열 색은 그대로. 산점·히트맵 범례처럼 어떤 두 색이든 맞닿는 형태는 3계열까지.
순차 · 발산
100
#cde2fb#14305a200
#9ec5f4#1a4a8c300
#6da7ec#2a6bc4400
#3987e5#3987e5500
#256abf#6da7ec600
#184f95#9ec5f4700
#0d366b#cde2fbneg-4
#1c5cab#86b6efneg-3
#2a78d6#5598e7neg-2
#6da7ec#2a78d6neg-1
#b7d3f6#1c5cabmid
#e9ecf2#333b52pos-1
#f7c5c4#7f1d1dpos-2
#ee8f8e#b8302fpos-3
#e34948#e34948pos-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-band | rgba(217,119,6,.14) | rgba(251,191,36,.16) | 기준 상한~하한 밴드 (주의색 14% 워시) |
--fna-chart-band-line | #d97706 | #fbbf24 | 밴드 경계 1px 점선 (임계선은 점선 허용) |
--fna-chart-deviation | rgba(220,38,38,.14) | rgba(248,113,113,.18) | 이탈 구간 세로 띠 (경보색 14% 워시) |
--fna-chart-muted | #b8bfd0 | #55607e | 비강조 계열 · 스파크라인 |
--fna-chart-empty | #5f6a86 | #9aa4bd | 빈 상태 글자 |
차트별 규칙
온도 추세선
- 계열: 센서 ≤3 이면 직접 라벨(선 끝), 4~6 이면 범례, 그 이상은 소형 다중.
- Y축 깨끗한 정수(℃), 눈금 4~7개. X축 시각(HH:mm) 5~6개(폰 3~4개).
- 이탈 점은
status-alarm마커(지름 8, 배경 링 2px). 이탈 건수는 제목 옆 배지. - 상호작용: 세로 크로스헤어가 가장 가까운 시각에 스냅, 툴팁 하나에 모든 계열 값(값 굵게, 계열명 보조). 키보드 포커스 시 같은 내용.
일별 막대 · 스파크라인
CCP 합격/불합격
적합부적합기록 없음
결재 진행
반려 2미작성 3작성 중 4검토 대기 6승인 대기 5승인 완료 32
반려미작성작성 중검토 대기승인 대기승인 완료
히트맵
000204060810121416182022냉동 A냉동 B냉장 1냉장 2전처리
-20.6℃12.4℃
마크 상수
| 상수 | 값 | 규칙 |
|---|---|---|
--fna-chart-line-width | 2px | 선. 스파크라인 1.5px |
--fna-chart-marker-r | 4px | 점 지름 8 + 배경색 링 2px |
--fna-chart-bar-max | 24px | 막대 최대 폭. 데이터 끝만 4px 라운드 |
--fna-chart-gap | 2px | 맞닿는 채움 사이 배경색 간격 |
--fna-chart-area-opacity | .1 | 면 채움 워시 |
높이 --fna-chart-h | 170 / 220 / 260 | 폰 / 태블릿 / 데스크톱 |
표 보기 쌍둥이
모든 차트는 같은 데이터를 .fna-table 로 보여주는 "표" 토글을 카드 머리에 둡니다. 툴팁은 보조일 뿐이며, 라이트에서 배경 대비 3:1 미만인 청록·노랑·분홍 계열은 직접 라벨 또는 표 보기가 필수입니다.
냉동창고 온도 이탈 1
Do · Don't
Do 한 계열 = 한 색, 값 라벨은 필요한 곳만
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