ScatterSharp
대량 센서 데이터를 위한 고성능 C#/.NET 산점도(Scatter Chart) 라이브러리입니다. 차트를 그린 상태를 통째로 직렬화했다가 다시 불러오면 줌 상태까지 즉시 동일하게 렌더링되며, 시리즈당 최대 1천만(10M) 점을 인터랙티브하게 다룹니다.
기능 갤러리
다중 시리즈 · 값-색 매핑 · 밀도 헥스빈 · 보조 Y축 · 시간축 · 선+영역 — 상용 차트 수준의 기능을 하나의 렌더러로 제공합니다.

핵심 하이라이트
시리즈당 최대 1천만 점
픽셀 컬럼당 min/max 다운샘플로 10M 점도 인터랙티브 렌더 — 1920×1080 기준 약 110ms.
하이브리드 직렬화 (.chart)
설정은 JSON, 대용량 좌표는 바이너리 blob을 ZIP 컨테이너로 — 저장했던 줌·선택 상태까지 그대로 복원됩니다.
단일 렌더러, 세 백엔드
SkiaSharp 하나로 WPF · WinForms · 헤드리스(PNG/SVG/PDF)가 픽셀 단위로 동일한 결과를 냅니다.
DB 역추적 상호작용
점을 클릭하면 원본 DB 행으로 역추적(PointIds + PointClicked) — 포인트별 커스텀 툴팁, 다중 시리즈 공유 툴팁.
주요 기능
모든 기능이 하나도 빠짐없이 ChartModel에 실려 직렬화 라운드트립됩니다.
마커 · 포인트
6종 마커 모양, 크기·색·불투명도, 버블(점별 크기), 값-색 매핑 + 컬러바, 이미지 마커까지 지원합니다.
인터랙션
툴팁+크로스헤어, 줌 박스(종횡비 유지), 축별 줌, 러버밴드 선택(저장됨), 범례 클릭 토글, 실시간 스트리밍 append.
축
선형/로그/시간축(라벨 자동 세분), 보조 Y축, 역축, 카테고리 축, 종횡비 고정, 축별 글꼴 지정.
주석 · 분석
임계선/밴드/사각형/텍스트 주석, 추세선+이동평균, 밀도 히트맵/헥스빈, 평균·중앙값·±kσ 통계 밴드.
스타일 · 출력
라이트/다크 테마 + 팔레트, 요소별 글꼴, PNG·SVG·PDF(벡터)·클립보드 내보내기, 글꼴 폴백으로 한글 등 비라틴 텍스트 렌더.
데이터
10M 다운샘플, 실시간 append(롤링 윈도우), 선/영역/막대 모드, 오차막대, NaN/결측 처리, SoA + Uniform X 메모리 최적화.
고급 분석 기능
밀도 히트맵/헥스빈 · 선/영역 · 오차막대 · 러버밴드 선택 — 분석 상태까지 저장·복원됩니다.

10M 포인트 실측 성능
1,000만 점 시리즈 기준(1920×1080), 복원 후 렌더 결과는 원본과 픽셀 단위로 일치합니다.
전체 렌더 (통계 밴드 포함)
줌 렌더 (컬링)
저장 크기 (f32 + deflate)
로드 (10M 복원)
비결: 보이는 구간만 컬링(VisibleRange)한 뒤 픽셀 컬럼당 min/max로 다운샘플 — 원본이 1천만 점이어도 실제로 그리는 정점은 화면 폭 수준입니다. 렌더 루프는 무할당(zero-allocation) 핫 패스로 동작합니다.
아키텍처 — 모델과 렌더러의 분리
차트의 모든 상태는 순수 POCO인 ChartModel 하나로 표현되고 렌더러는 이 모델만 입력으로 받습니다 — "불러오기 → 렌더"가 곧 "저장했다 즉시 그리기"가 됩니다.
ScatterSharp를 사용해 보세요
Apache License 2.0으로 공개된 오픈소스입니다. GitHub에서 소스와 샘플(10M 벤치·WinForms 데모·기능 쇼케이스)을 확인하실 수 있습니다.