Table of Contents
Tại sao D3.js cho hình ảnh hoá dữ liệu
Dữ liệu lắp vào khoảng trống giữa số nguyên và sự hiểu biết của con người. Trong số nhiều công cụ sẵn sàng, D3.js (Data-Driven Data) nổi bật như một thư viện JavaScript có độ phân tích trực tiếp, mức độ thấp cung cấp trực tiếp điều khiển các mô hình đối tượng tài liệu (DOGG). Không giống như các thư viện có cấp các thư viện có cấp sự tùy chỉnh cao, D3 cho phép bạn tạo ra các hình ảnh trực quan cần thiết - từ biểu đồ đơn giản đến đồ địa lý phức tạp và mạng lưới. Nó cung cấp mô hình kết nối dữ liệu để đảm bảo rằng bất kỳ thay đổi dữ liệu cập nhật dữ liệu tự động, làm cho các yếu tố trực quan sát và thông tin tương tác thiết kế và dữ liệu đã được sử dụng cho việc phân tích hóa tập tin có tính năng đa dạng thiết lập tập tin.
Kết luận của D3.js
Để khai thác D3 một cách hữu hiệu, bạn phải hiểu các nguyên tắc cơ bản của nó: sự lựa chọn, sự kết hợp dữ liệu, thang đo và D3 hoạt động bằng cách chọn các yếu tố HTML, kết hợp dữ liệu với chúng và áp dụng các biến đổi. Mẫu này được thể hiện qua dây chuyền và được minh họa bằng một ví dụ đơn giản.
Đóng sách dữ liệu và chọn
D3 sử dụng các phần tử của mục tiêu, rồi gắn dữ liệu vào chúng. Phương pháp [FLT: 0] gia nhập một dãy giá trị với nút chọn, và phương pháp [FLT: 1] tạo thành phần tử mới cho bất kỳ điểm dữ liệu nào thiếu nút HTML tương ứng. Cấu hình cập nhật này cho phép bạn xử lý hiệu quả các tập dữ liệu động.
Ví dụ, để tạo vòng tròn cho một bộ dữ liệu:
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");
Trục và thang
Dữ liệu thô thường trải dài phạm vi (các giá trị thô) đến một phạm vi (địa vị). Trình cân thường bao gồm , và . Trục được tạo ra bằng [FL:6] hoặc [FL: 7).
Ví dụ về tỷ lệ tuyến tính:
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);
Xây dựng hình ảnh tương tác với D3.js
Tính năng tương tác biến biểu đồ tĩnh thành truyện có thể xem được. D3 hỗ trợ quản lý sự kiện, chuyển tiếp, và cập nhật năng động. Bạn có thể thêm mẹo công bố, thu nhỏ, kéo, lọc và hoạt hình với chi phí tối thiểu. Bên dưới chúng tôi mở rộng trên các mẹo công cụ và giới thiệu các tính năng tương tác phổ biến khác.
Công cụ và cách tô sáng
Các công cụ cung cấp giá trị dữ liệu chính xác khi lơ lửng. Dùng hệ thống sự kiện D3, bạn có thể tạo một sự thay đổi để hiển thị chi tiết. Chẳng hạn, mở rộng biểu đồ thanh có lời mách đã được hiển thị trong mã gốc; ở đây chúng tôi cũng thêm [FLT: 0] màu [FLT: 1] vào màn hình nền:
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");
});
Phóng to và thu nhỏ
Đối với dữ liệu lớn hoặc lưu trữ thời gian, phóng to và kéo dài giúp người dùng tập trung vào vùng quan tâm. Hành vi biến đổi hệ thống tọa độ. Áp dụng nó vào nhóm SVG chứa yếu tố thị giác của bạn.
const zoom = d3.zoom()
.scaleExtent([1, 10])
.on("zoom", (event) => {
g.attr("transform", event.transform);
});
svg.call(zoom);
Cập nhật dữ liệu động
Bảng điều khiển tương tác thường cần để làm tươi dữ liệu mà không cần tải lại mô hình cập nhật của trang. D3 của việc khéo léo xử lý bổ sung, gỡ bỏ và sửa đổi các yếu tố. Chìa khóa là chạy lại dữ liệu mới và dùng cho nút phụ.
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);
}
Công nghệ D3 Cấp cao
Hình ảnh hoá và bố trí địa lý
D3 bao gồm các mô- đun bố trí chuyên biệt cho biểu đồ phức tạp: tạo ra bánh/dữ liệu, mô phỏng vật lý cho đồ thị mạng dữ liệu dự án bằng GeoJSON. Những mô- đun này giảm nghiêm trọng mã cần thiết cho sự hình dung phức tạp. Lấy thí dụ, tạo một mạng lưới chỉ dẫn lực:
const simulation = d3.forceSimulation(nodes)
.force("link", d3.forceLink(links))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
Chuyển đổi và hoạt hình
Sự chuyển đổi mịn tăng kinh nghiệm người dùng. D3 tạo ra sự thay đổi thuộc tính theo thời gian. Bạn có thể điều khiển khoảng thời gian, giảm dần và chậm hơn. Ví dụ, thanh hoạt động để tăng trưởng:
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);
Tập tốt nhất cho sản xuất- ready D3
Cách tô màu
Đối với bộ dữ liệu lớn (hàng ngàn điểm), thao tác trực tiếp chạy [FLT: 0] có khả năng thu thập [FLT: 0] [FLT: 1] vẽ bằng [FLT-canvas ). Hãy dùng với thư viện như bộ đệm. gl. Đối với hình ảnh dựa trên SVG: 1], giảm sự phức tạp bằng cách dùng [FL:21] nhóm, và tránh mỗi phần tử trong mỗi khung. [FL: FL: FdL] [FdL: FL] [FL] [FL:]
Khả năng truy cập và sự đáp ứng
Hiển thị các tính năng ảo nên được mọi người dùng chấp nhận. Cung cấp thẻ trên yếu tố SVG, sử dụng tính năng James, và bao gồm bảng dựa vào văn bản như là bản sao lại. Để thiết kế, kích cỡ SVG trên chiều rộng của container, dùng và lắng nghe thay đổi kích cỡ cửa sổ với 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);
Tổ chức mã hóa
Ngay cả trong một ứng dụng trang, cấu trúc mã D3 của bạn thành mô- đun: một cho dữ liệu thu thập, một cho thang/x, một cho vẽ, và một cho tương tác. Hãy sử dụng ES6 mô- đun hoặc một burn như Webpack. Tránh trộn D3 với móc cơ cấu cơ bản của bạn trực tiếp; thay vào đó, tạo một lớp D3 mà khung gọi.
Kết hợp D3 với các khung hiện đại
Phản ứng, Alar và Vue tự quản lý hệ thống điện thoại (, để tránh xung đột, hãy dùng D3 để tính toán (các quy trình, hình dạng) và để khung trình trình trình bày chữ SVG. Hoặc dùng một bộ cuộn giấy đóng góp như hoặc . Tuy nhiên, để kiểm soát đầy đủ, bạn vẫn có thể sử dụng D3 bên trong [FL:27] (hình thức) hoặc [FLT: 28] (hình ảnh nền) (hình ảnh với một tham chiếu gốc. Nguyên tố này giữ các vòng tuần hoàn toàn khác nhau, kiểm soát.
Ví dụ và trường hợp sử dụng trên thế giới thực
D3 có nhiều dự án hình ảnh hoá cao: [FLT: 0] Gallery trên Obserable hiển thị hàng trăm ví dụ, từ hình ảnh hoạt hình cho đến dòng thời gian tương tác. Các tổ chức tin tức như tờ New York Times dùng D3 cho các câu chuyện dữ liệu riêng. Trong thiết lập kinh doanh, D3 cho phép bảng điều khiển tự chọn cho dữ liệu tài chính hoặc cảm biến I- thời gian thực. Nó có nghĩa là bạn có thể kết hợp nhiều kiểu biểu đồ vào một giao diện cosive.
Ví dụ: Vẽ đồ thị tương tác với đồ thị và chổi
Hãy tưởng tượng một tập dữ liệu 500 điểm với x, y và phân loại. Dùng D3, bạn có thể tạo một lô đất có các hình tròn được tô màu theo phân loại, một công cụ hiển thị tọa độ chính xác, và một cái chổi hiển thị các điểm đã chọn. Cấu trúc mã theo các mẫu trên. Tương tác với chổi sẽ trông như:
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);
}
}
Học hỏi tài nguyên và bước kế tiếp
Để làm chủ D3, bắt đầu với tài liệu chính thức .js [FLT: 1] [FLT:].js kinh nghiệm [FLT: 1], cung cấp mã sống để bạn có thể nĩa. Cũng đọc [FLT:] Dữ liệu trực tiếp cho Web] của Scott để giới thiệu kỹ lưỡng. Thực hiện các biểu đồ cổ điển (các biểu đồ, mã truyền thống, dịch, dịch, s. [FT:] Thêm vào đó [T] bản đồ [FT].].] để tìm kiếm trang web [FT].]. [T].]
Kết luận
D3.js vẫn còn tiêu chuẩn vàng để mô tả tương tác với tự động trên web. Đường cong học cao được bù đắp bởi tính linh hoạt, hiệu suất và hỗ trợ cộng đồng. Bằng cách nắm vững các khái niệm cốt lõi của nó - tổ chức các cuộc bầu cử, kết nối dữ liệu, cân bằng và xử lý - bạn có thể xây dựng hình ảnh minh họa chuyển dữ liệu mà chuyển thành sự hiểu biết. Dù bạn đang xây dựng một biểu đồ thanh đơn giản, hay một bảng điều khiển đa màn hình phức tạp, D3 cho bạn công cụ để tạo ra các công cụ sẵn sàng, hấp dẫn và có thể truy cập được. Bắt đầu nhỏ, nó sẽ xử lý, và sử dụng các ví dụ hệ sinh thái phong phú để hướng dẫn hành trình.