Table of Contents

ทําไม D3js ถึงใช้ภาพประกอบข้อมูล

แผนภาพข้อมูลจะเชื่อมโยงขอบเขตระหว่างตัวเลขดิบและความเข้าใจของมนุษย์ โดยมีเครื่องมือมากมายที่มีอยู่ คือ D3js (เอกสาร Data-Driven) โดดเด่นเป็นไลบรารีจาวาสคริปต์ระดับต่ํา ที่ให้สิทธิ์ควบคุมรูปแบบวัตถุ (DOM) ซึ่งไม่เหมือนกับแผนภูมิแบบมาตรฐานคุณภาพสูงที่มีการกําหนดค่าเอง D3 ให้คุณสร้างภาพให้พอดีจากแผนภูมิแบบภาพแบบง่าย ๆ ไปเป็นแผนภาพแบบแผนภูมิและผังเครือข่าย โมเดลของอัลบั้มนี้แน่ใจว่าข้อมูลต่าง ๆ จะเปลี่ยนแปลงค่าต่าง ๆ ของคุณโดยอัตโนมัติ ทําให้สามารถปรับเปลี่ยนหรือปรับเปลี่ยนรูปแบบภาพได้โดยปรับแต่งให้เข้ากับข้อมูลได้ตามรูปแบบแฟ้ม DPOFF และใช้ข้อมูลแบบ DPForactor ได้อย่างง่าย โดยมีความสามารถในการจัดการอย่างมีประสิทธิภาพ และระบบข้อมูลแบบต่าง ๆ ที่ใช้จัดการอย่างง่าย เช่น language languages และระบบย่อยของโครงการ D.

Core Concepts of D3js

เพื่อ จะ ควบคุม D3 ได้ คุณ ต้อง เข้าใจ หลัก การ พื้น ฐาน ของ มัน: การ คัด เลือก, การ ผูก มัด ข้อมูล, มาตรา, และ การ เลือก วิธี ดี วี จี, การ เลือก องค์ ประกอบ ของ DOM, การ ผูก มัด ข้อมูล, และ การ นํา มา ใช้ ใน การ เปลี่ยน แปลง.

การจับคู่และการจับคู่ข้อมูล

D3 ใช้ CSS เลือกองค์ประกอบเป้าหมาย จากนั้น เชื่อมต่อข้อมูลไปยังพวกมัน วิธีการ [FLT: 0] ร่วมกับลําดับของค่าที่เลือก และวิธีการ [FT: 1) สร้างองค์ประกอบใหม่สําหรับข้อมูลใดๆ ที่ไม่มีโหนด DOM ที่สอดคล้องกัน รูปแบบ inpate-exit อนุญาตให้คุณจัดการกับข้อมูลไดนามิกส์ได้มีประสิทธิภาพ

ตัวอย่างเช่น เพื่อสร้างวงกลมสําหรับชุดข้อมูล

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");

มาตราส่วนและแกน

ข้อมูล Raw มักสแปนช่วงที่ไม่มีการโยงไปยังพิกัดพิกเซล D3 ให้ [FLT: 0] ขนาด [FLT: 0] ที่ทําแผนที่โดเมน (ค่าสี) ไปเป็นช่วง (ค่าพิกเซล) เกล็ดรวม (FLT:3) และ [FLT: 4] (FLT: 5] axs ถูกสร้าง [FLT: 6] หรือ [FT] [FT] หรือ [FLL]] ไมโครค. ไมโครค. และโครงสร้างแกนอื่น ๆ ของแกน (FTL: 7). ไมโครค.

ตัวอย่างของขนาดเชิงเส้น:

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);

การมองเห็นแบบโต้ตอบบนอาคารกับ D3js

interactivity เปลี่ยนชาร์ตคงที่ ให้เป็นเนื้อเรื่องที่ขยายได้ D3 สนับสนุนการจัดการเหตุการณ์, การเปลี่ยนแปลง และการปรับปรุงแบบไดนามิกส์ คุณสามารถเพิ่มทูลทิป, ขยาย, ลาก, ลาก, กรอง และแอนิเมชันที่มีค่าใช้จ่ายน้อย ด้านล่างเราขยายตัวบนทูลทิป และแนะนําคุณสมบัติโต้ตอบทั่วไปอื่น ๆ

การทําตัวเน้นแบบผุดแสดงรอยหยัก

Tooltiples ให้ข้อมูลที่ถูกต้องในการยกภาพขึ้นบิน โดยใช้ระบบเหตุการณ์ของ D3 นี้ คุณสามารถสร้าง [FLT: 9] ที่แสดงรายละเอียด ตัวอย่างเช่น การขยายชาร์ตบาร์ที่มีทูลทิป แสดงอยู่ในรหัสดั้งเดิมแล้ว; ที่นี่เราเพิ่ม [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 พฤติกรรม [FLT: 11] ของ [FLT: 11] เปลี่ยนแปลงระบบพิกัด ให้ปรับใช้กับ SVG กลุ่มที่มีองค์ประกอบภาพของคุณ

const zoom = d3.zoom()
 .scaleExtent([1, 10])
 .on("zoom", (event) => {
 g.attr("transform", event.transform);
 });

svg.call(zoom);

ปรับปรุงข้อมูลแบบไม่ตายตัว

รูปแบบการโต้ตอบมักจําเป็นในการรีเฟรชข้อมูลโดยไม่ต้องเรียกหน้าใหม่อีกครั้ง รูปแบบการปรับปรุงของ D3 จะจัดการอย่างสุภาพในการเพิ่ม, ลบ และแก้ไของค์ประกอบ กุญแจคือ การทําการผนวกข้อมูลใหม่เข้ากับข้อมูลใหม่ และใช้ [FLT: 13] สําหรับโหนดเพิ่ม

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

ผัง และ ภาพ ถ่าย ทาง ภูมิศาสตร์

D3 รวมโมดูลผังเฉพาะสําหรับชาร์ตที่ซับซ้อน: สร้างข้อมูลเชิงภูมิศาสตร์ จําลองฟิสิกส์สําหรับกราฟเครือข่าย [FT: 17] โครงการโครงการแผนที่ข้อมูลโดยใช้ GOJson มอดูลนี้ได้ลดรหัสที่จําเป็นในการสร้างภาพอย่างซับซ้อน ตัวอย่างเช่น การสร้างเครือข่ายที่บังคับ:

const simulation = d3.forceSimulation(nodes)
 .force("link", d3.forceLink(links))
 .force("charge", d3.forceManyBody())
 .force("center", d3.forceCenter(width / 2, height / 2));

การ เปลี่ยน แปลง และ การ เคลื่อน ไหว

การเปลี่ยน แปลงที่นุ่มนวล จะช่วยเพิ่มประสบการณ์ของผู้ใช้ได้ D3 (FLT:19) การเปลี่ยนคุณลักษณะตามกาลเวลา คุณสามารถควบคุมช่วงเวลา, การลดความเร็ว, และความล่าช้าได้ ตัวอย่างเช่น การเพิ่มแถบการขยาย:

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);

แบบฝึกหัดที่ดีที่สุดสําหรับอ่าน D3 ด้วยการผลิตแบบเพิ่ม

การตั้งแนวร่วม

สําหรับข้อมูลขนาดใหญ่ (thousands of point), การจัดการ DOM โดยตรงจะกลายเป็นแบบช้า ใช้ [FLT: 0] Canvas [FLT: 1) แปลโดยผ่านทาง D3-canvas หรือพิจารณา. เวป (FTT: 3) ด้วยไลบรารีแบบ ระเบียงแบบ lt; สําหรับ SVG- impleplepleplepleplepleases, การใช้ DOM [FT] [FLT]] และหลีกเลี่ยงองค์ประกอบในทุกเฟรม [FTIF] [T] [LElllllllllll+[T[T]]] [TLLLFLLFLLLLLLLLL] และตัวควบคุมเหตุการณ์ต่าง ๆ] เลือกรายการ: [TVPULULULULULUCTULULULLLLLLUSTSDLLUSTS (ULUSTERESTESTESTERSTERDUSTERUSTERUSTERUSTEST].USTUSTEST (.USTDLUST

การ ช่วย เหลือ และ การ รับ ใช้

การปรับภาพ ควรจะถูกแทนที่ด้วยผู้ใช้ทั้งหมด การจัด [FLT: 22] ป้ายกํากับบนองค์ประกอบ SVG ใช้คุณสมบัติ ARAA และรวมตารางข้อความเป็นตารางการผิดพลาดด้วย สําหรับการออกแบบแบบตอบสนอง ขนาดฐาน SVG บนความกว้างของคอนเทนเนอร์ โดยใช้[FLT: 23] และรับฟังเหตุการณ์ที่ได้จากการปรับขนาดหน้าต่างด้วย 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 ของคุณไปยังโมดูล: หนึ่งสําหรับข้อมูล, หนึ่งสําหรับ ตาชั่ง/axes, หนึ่งสําหรับวาด และหนึ่งสําหรับปฏิสัมพันธ์ ใช้โมดูล ES6 หรือ marks หรือ bukler เช่น webs. หลีกเลี่ยงการผสมเหตุผล D3 กับแผ่นเกมเกมแบบ ไลฟ์ซีเคิลโดยตรง แทน การสร้างคลาส D3 ที่เรียกแบบเฟรม

การ กลั่น กรอง ดี 3 กับ กรอบ ปัจจุบัน

React, Angular, and Vue จัดการกับ DOT: 26) เพื่อหลีกเลี่ยงการขัดแย้ง ใช้ D3 เพื่อการคํานวณ (ระดับ, รูป) และให้เฟรมแปลง SVG อีกแบบหนึ่ง ใช้คอมโพเนนท์ที่อุทิศแล้ว เช่น [FLT: 25] หรือ (FLT: 26) อย่างไรก็ตาม สําหรับการควบคุมเต็มรูปแบบ คุณยังคงสามารถใช้ D3 ใน [FLT: 27] หรือ [FT] [FL] [FL] (อังกฤษ: language: University) ใช้องค์ประกอบแบบราก (Ang) ซึ่งทําให้ระบบของ D3 การปรับปรุงระบบทํางานต่อไปได้โดยเพิ่มประสิทธิภาพจาก วัฒนา.

ตัว อย่าง และ ใช้ กรณี ของ โลก จริง

D3 มีอํานาจในโครงการถ่ายภาพภาพภาพภาพสูงหลายโครงการ: [FLT: 0] D3 แกลเลอรี่บน Observable [FLT: 1) แสดงตัวอย่างหลายร้อยตัว จาก choroples ไปใช้ไทม์ไลน์คอมไพล์ New York Times ใช้ข้อมูลที่ตั้งเองในโครงการ D3 เปิดใช้งานการปัดเกลี่ยภาพสําหรับข้อมูลการเงินหรือเครื่องไอโอทีแบบเรียลไทม์ได้ ซึ่งหมายความว่าคุณสามารถรวมผังของตัวต่อแบบเดียวได้

ตัวอย่าง: การแบ่งส่วนแบบโต้ตอบแบบวางแผงด้วยทูลทิปและแปรงทาสี

ลองนึกภาพชุดข้อมูล 500 จุดที่มีจุด x, y, และหมวดหมู่ โดยการใช้ 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);
 }
}

ทรัพยากร การ เรียน รู้ และ ขั้น ตอน ต่อ ไป

Toster D3, เริ่มต้นที่ [FLT: 0] เอกสาร [FLT] [FLT: 1] และคู่มือเสรี [FLT] OffT: 2] Obsvable (FLT:3). ทํางานผ่านสมุดจดแบบ Obsurvable ซึ่งให้รหัสที่ยังเป็นโครง คุณสามารถช่วยแยกได้ นอกจากนี้ยังอ่าน [FLT: 4] ข้อมูลการปรับเปลี่ยนสําหรับเว็บ โดย Sercy[FL] [FLL] เพื่อแนะนําโดยละเอียด โดยวิธีการแก้ไขข้อมูลแบบคลาสสิค (ชาร์ต, trl] โดยเพิ่มข้อมูลแบบเยื้องจากตาราง (อังกฤษ) แล้วเพิ่มข้อมูลการถอดแผ่น [FTLL/L] [FL] หรือ [T].

รูปแบบการวน

D3js ยังคงใช้มาตรฐานทองสําหรับภาพพจน์ข้อมูลโต้ตอบบนเว็บ เส้นโค้งการเรียนรู้แบบชันของมันจะชดเชยได้โดยความยืดหยุ่นเชิงเปรียบเทียบ, ประสิทธิภาพ, และการสนับสนุนชุมชน โดยมีพื้นฐานพื้นฐานในการผลิต เช่น การเลือกตั้ง ข้อมูล, การผูกขาด, การจัดการข้อมูล, และการจัดการจัดการเหตุการณ์ต่าง ๆ -- คุณสามารถสร้างภาพภาพจากข้อมูลที่เปลี่ยนข้อมูลเป็นข้อมูลอย่างลึกซึ้ง ไม่ว่าคุณจะสร้างแผนภูมิแบบง่าย ๆ หรือแบบหลายมุมมองแบบหลายแบบ D3 จะสร้างเครื่องมือสร้างความพร้อม, ใช้งาน, และสร้างภาพขึ้นมา, เริ่มใช้งาน, ขนาดเล็ก, และใช้ตัวอย่างระบบนิเวศที่อุดมไปด้วย