Table of Contents
왜 D3.js 데이터 시각화
D3.js (Data-Driven Documents)는 다양한 종류의 JavaScript 라이브러리를 사용하여 문서 개체 모델(DOM)을 직접 제어할 수 있는 다양한 기능을 제공합니다. D3.js (Data-Driven Documents)는 사용자 정의를 제공하는 고급 차트 라이브러리와는 달리, D3는 간단한 바코드와 네트워크 다이렉트로프에 필요한 시각적 표현을 정확하게 만들 수 있습니다. 데이터 바인딩 데이터 처리는 데이터 처리에 있어, 데이터 처리는 사용자의 데이터 처리 능력과 상호작용을 위한 다양한 데이터 처리 기능을 보장하는 데 있어, 다양한 데이터 처리 능력과 상호작용을 위한 다양한 데이터 처리 기능을 제공합니다.
D3.js의 핵심 개념
D3를 효과적으로 마친다면, 기초 원칙을 이해해야 합니다. 선택, 데이터 바인딩, 스케일 및 SVG. D3는 DOM 엘리먼트, 바인딩 데이터를 선택하여 변환을 적용함으로써 작동합니다. 이 패턴은 체인링을 통해 표현되며 간단한 예로 가장 잘 표현됩니다.
선택 및 데이터 바인딩
D3는 CSS 선택기를 대상 요소로 사용하며, 데이터를 첨부합니다. ] 방법은 선택한 노드와 값의 배열에 참여하고, ] 메소드는 해당 DOM 노드가 부족한 데이터 포인트에 대한 새로운 요소를 만듭니다. 이 입력 업데이트 패턴을 사용하면 동적 데이터셋을 효율적으로 처리할 수 있습니다.
예를 들어, dataset에 대한 원을 생성하려면:
const data = [10, 25, 40, 30];
const svg = d3.select("body").append("svg")
.attr("width", 400)
.attr("height", 200);
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", (d, i) => i * 100 + 50)
.attr("cy", 100)
.attr("r", d => d)
.attr("fill", "steelblue");
규모와 Axes
원시 데이터는 종종 픽셀 좌표에 직접지도하지 않는 범위가 있습니다. D3는 scales]를 제공합니다. 도메인 (data 값)을 범위 (픽셀 위치)로 맵을 표시하는 것입니다. 일반적인 규모에는 , ], ]가 있습니다. Axes는 또는 ]를 사용하여 생성됩니다.
선형 가늠자의 보기:
const xScale = d3.scaleLinear()
.domain([0, d3.max(data)])
.range([0, width]);
const yScale = d3.scaleLinear()
.domain([0, d3.max(data)])
.range([height, 0]);
const xAxis = d3.axisBottom(xScale);
svg.append("g")
.attr("transform", `translate(0, ${height})`)
.call(xAxis);
D3.js와 대화 형 시각화 구축
D3는 이벤트 핸들러, 전환 및 동적 업데이트를 지원합니다. 최소 오버 헤드와 도구 팁, 줌, 드래그, 필터링 및 애니메이션을 추가 할 수 있습니다. 아래 도구 팁을 확장하고 다른 일반적인 대화형 기능을 소개합니다.
도구 팁 및 하이라이트
도구 팁은 hover에 정확한 데이터 값을 제공합니다. D3의 이벤트 시스템을 사용하여 세부 사항을 보여줍니다 [[FLT : 9]]]를 뜨 수 있습니다. 예를 들어, 도구 팁을 가진 바 차트를 확장하는 것은 원래 코드에 이미 보였습니다. 여기에서 우리는 또한 Hover에서 [[FLT : 0]]] 색상 변경[FLT : 1]]을 추가합니다.
svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", (d, i) => i * 70)
.attr("y", d => height - d * 3)
.attr("width", 50)
.attr("height", d => d * 3)
.attr("fill", "steelblue")
.on("mouseover", function(event, d) {
d3.select(this).attr("fill", "orange");
tooltip.style("display", "block").text(`Value: ${d}`);
})
.on("mousemove", (event) => {
tooltip.style("left", (event.pageX + 10) + "px")
.style("top", (event.pageY - 20) + "px");
})
.on("mouseout", function() {
d3.select(this).attr("fill", "steelblue");
tooltip.style("display", "none");
});
줌과 팬
대용량 데이터셋 또는 시간 시리즈 데이터, 급상승 및 판닝은 사용자들이 관심 지역의 지역에 집중할 수 있도록 도와줍니다. D3의 동작은 좌표계를 변환합니다. 시각적 요소가 포함된 SVG 그룹에 적용하십시오.
const zoom = d3.zoom()
.scaleExtent([1, 10])
.on("zoom", (event) => {
g.attr("transform", event.transform);
});
svg.call(zoom);
Dynamic Data 업데이트
대화형 대시보드는 종종 페이지를 다시로드하지 않고 데이터를 새로 고침해야합니다. D3의 업데이트 패턴은 추가, 제거 및 수정 요소가 충실히 취급합니다. 키는 새로운 데이터와 함께 다시 실행되며 추가 노드에 대한 를 사용합니다.
function updateData(newData) {
const circles = svg.selectAll("circle").data(newData);
circles.exit().remove(); // remove old
circles.enter().append("circle") // add new
.merge(circles) // merge with existing
.attr("cx", (d, i) => i * 100 + 50)
.attr("cy", 100)
.attr("r", d => d);
}
고급 D3 기술
레이아웃 및 Geographic 시각화
D3는 복잡한 차트에 대한 전문 레이아웃 모듈을 포함합니다. ]은 파이/라디얼 데이터를 생성하고, ]은 네트워크 그래프를 위한 물리를 시뮬레이션합니다. ] 프로젝트 맵 데이터 GeoJSON을 사용하여. 이 모듈은 정교한 시각화에 필요한 코드를 압축합니다. 예를 들어, 힘이 직접적인 네트워크를 생성:
const simulation = d3.forceSimulation(nodes)
.force("link", d3.forceLink(links))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
교통 및 애니메이션
매끄러운 전환은 사용자 경험을 향상시킵니다. D3의 ]은 시간이 지남에 따라 속성 변경을 나타냅니다. 지속, 상승 및 지연을 제어 할 수 있습니다. 예를 들어, 성장하는 animating 막대 :
svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", (d, i) => i * 70)
.attr("y", height)
.attr("width", 50)
.attr("height", 0)
.attr("fill", "steelblue")
.transition()
.duration(800)
.ease(d3.easeBounce)
.attr("y", d => height - d * 3)
.attr("height", d => d * 3);
생산-Ready D3에 대한 모범 사례
성능 최적화
큰 데이터 세트 (점의 수천), 직접 DOM 조작은 느립니다. 사용 canvas D3-canvas를 통해 렌더링 또는 WebGL] 을 사용하여 라이브러리와 deck.gl. SVG 기반 시각을 위해, 그룹을 사용하여 DOM 복잡성을 감소시키고, 각 요소들을 모두 제거 [LT:0]]].]]].]].]]].]].C.C.C.C.C.C.]].C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.:[
접근성 및 책임
Visualizations는 모든 사용자에 의해 perceivable이어야 합니다. SVG 요소에 ] 태그를 제공 하 고 ARIA 속성을 사용 하 여, 텍스트 기반 테이블을 폴 리백으로 포함 합니다. 반응형 디자인, 기본 SVG 차원 를 사용 하 여 D3와 창 크기를 들으.
function resize() {
const width = container.node().getBoundingClientRect().width;
svg.attr("width", width)
.attr("height", width * aspectRatio);
// redraw scales and axes
}
window.addEventListener("resize", resize);
기업정보
단일 페이지 애플리케이션에서도 D3 코드를 모듈로 구성하십시오. 데이터 fetching, 도면 중 하나, 상호 작용을 위해 하나, 그리고 하나. ES6 모듈 또는 웹팩과 같은 번들러를 사용하십시오. 프레임 워크 수명주기 후크와 D3 논리를 직접 섞지 마십시오. 대신, 프레임 워크 통화가 D3 클래스를 만듭니다.
현대 Frameworks와 D3 통합
React, Angular 및 Vue는 자신의 DOM을 관리합니다. 충돌을 방지하기 위해 D3를 계산 (스케일, 모양)에 사용하며 프레임 워크가 SVG를 렌더링합니다. 또는 또는 와 같은 전용 래퍼를 사용합니다. 그러나 전체 컨트롤을 위해 D3를 사용하여 (React) 또는 (Angular)를 루트 요소로 설정하십시오. 이 D3는 별도의 프레임 워크를 유지합니다.
Real-World 예제 및 사용 사례
D3는 많은 고출력 시각화 프로젝트: ]D3 Gallery on Observable]는 수백 개의 예를 보여줍니다. 애니메이션 초로플스에서 대화형 타임라인으로 진행됩니다. News 조직은 사용자 정의 데이터 스토리를 위해 D3를 사용합니다. 엔터프라이즈 설정에서 D3는 금융 데이터 또는 실시간 IoT 센서 피드에 대한 사용자 정의 대시보드를 가능하게 합니다. 그 유연성은 단일 응집 인터페이스로 여러 차트 유형을 결합할 수 있습니다.
예: Tooltips 및 Brushing을 가진 상호 작용하는 Scatter 도트
x, y 및 카테고리로 500 포인트의 데이터 세트를 상상해보십시오. D3를 사용하면 카테고리로 착색 된 원형이있는 흩어져있는 도형물을 만들 수 있으며 정확한 좌표를 보여주는 도구 팁 및 선택한 포인트를 강조하는 브러시가 있습니다. 코드 구조는 위의 패턴을 따릅니다. 브러시 상호 작용은 다음과 같습니다.
const brush = d3.brush()
.extent([[0, 0], [width, height]])
.on("brush end", brushed);
svg.append("g").call(brush);
function brushed(event) {
if (event.selection) {
const [[x0, y0], [x1, y1]] = event.selection;
circles.classed("selected", d =>
x0 <= xScale(d.x) && xScale(d.x) <= x1 &&
y0 <= yScale(d.y) && yScale(d.y) <= y1
);
} else {
circles.classed("selected", false);
}
}
학습 자료 및 다음 단계
D3를 마스터하려면 공식 D3.js 문서]에 무료 튜토리얼과 Observable]에 대한 무료 튜토리얼을 시작합니다. 관찰 가능한 노트북을 통해 작업하면 포크를 할 수있는 라이브 코드를 제공합니다. 또한 "Scott Murray[에 의한 웹에 대한 상호 작용 데이터 시각화를 읽습니다. (FLT:3).
관련 기사
D3.js는 웹에서 사용자 정의 대화 형 데이터 시각화를위한 금 표준을 유지. 그것의 가파른 학습 곡선은 일치 유연성, 성능, 커뮤니티 지원으로 오프셋된다. 핵심 개념 선택, 데이터 바인딩, 스케일 및 이벤트 처리 - 당신은 통찰력으로 데이터를 전환 시각화를 구축 할 수 있습니다. 간단한 바 차트 또는 복잡한 멀티 뷰 대시 보드를 구축 여부, D3는 생산 읽기, 참여, 액세스 시각화를 만들 수있는 도구를 제공합니다. 예를 들어, 작은 탐색기 및 편리한 탐색기.