الهندسة المدنية والهيكلية
استخدام الجازفر لخلق تصورات البيانات التفاعلية مع D3.js
Table of Contents
لماذا D3.js for Data Visualization
وتبرز البيانات التي ترسمها اللجنة في صورة مرئية الفجوة بين الأعداد الخام والتفاهم البشري، ومن بين الأدوات العديدة المتاحة، تبرز البيانات دال-3-ي (وثائق البيانات الرقمية) باعتبارها مكتبة متعددة المستويات، وهادفة المستوى، وتحكم المطورين مباشرة في نموذج مقاطع الوثائق، وخلافاً لما توفره من بيانات محدودة، فإن D3 يتيح لكم تصميم شبكة نموذجية مرئية تحتاجونها من خريطة مبسطة.
المفاهيم الأساسية للـ D3.js
ولتسخير الـ دي 3 بفعالية، يجب أن تفهموا مبادئه الأساسية: الاختيارات، وملزمة البيانات، والجداول، ودال-3 تعمل باختيار عناصر إدارة الشؤون الإدارية، والبيانات الملزمة لها، وتطبيق التحولات، وهذا النمط يعبر عن طريق سلاسل الطرق، ويتضح على أفضل وجه بمثال بسيط.
الاختيارات وتوحيد البيانات
D3 uses CSS selectors to target elements, then attach data to them. The method joins an range of values with selected nodes, and the method creates new elements for any data points that lack a corresponding DOM node. This enter-update-exit pattern allows you to handle dynamic datasets efficiently.
For instance, to createدوائر for a 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");
Scales and Axes
وكثيراً ما تُنتج بيانات راو عن النطاقات التي لا ترسم خرائط مباشرة للإحداثيات البكسلية.() وتنص المادة 3 على [() على أن ترسم نطاقاً (قيم البيانات) إلى نطاق (مناصب ثابتة)() وتشمل الجداول المشتركة [(]، [الشكل الافتراضي: 5].
مثال على جدول خطي:
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
فالتفاعل يتحول إلى مخططات ثابتة إلى قصص قابلة للاستقصاء، ودال-3 يدعم متعاملي الأحداث، والتحولات، والتحديثات الدينامية، ويمكنكم إضافة أدوات، وحدوث، وسحب، وتصفية، ورسوم تقديرية ذات رأس أعلى من ذلك، ونابع منها أن نتوسع في مجموعات الأدوات، وأن نستحدث سمات تفاعلية مشتركة أخرى.
المذيبات والتنبيهات
تُعطي الأدوات قيم بيانات دقيقة على المرفأ، وباستخدام نظام أحداث (دي 3) يمكنك أن تُحدث تغييراً عائماً، على سبيل المثال، تم توسيع نطاق رسم بياني مع أدوات تم عرضها في الرمز الأصلي، وهنا أيضاً نضيف ]
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");
});
زوم وبان
بالنسبة لمجموعات البيانات الكبيرة أو بيانات السلاسل الزمنية، يقوم مستعملو التكبير والملابس الداخلية بالتركيز على المناطق ذات الاهتمام.
const zoom = d3.zoom()
.scaleExtent([1, 10])
.on("zoom", (event) => {
g.attr("transform", event.transform);
});
svg.call(zoom);
تحديث البيانات الديناميكية
لوحات السحب التفاعلية غالباً ما تحتاج إلى إعادة تجديد البيانات دون إعادة تحميل الصفحة نمط تحديث 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);
}
التقنيات المتقدمة دال-3
العيون والتصورات الجغرافية
D3 includes specialized layout modules for complex charts: creates pie/radial data, ] simulates physics for network graphs, projects map data using GeoJSON. These modules drastically reduce the code needed for sophisticated visualizations. For example, creating a force-directed network:
const simulation = d3.forceSimulation(nodes)
.force("link", d3.forceLink(links))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
الانتقال والتقديرات
التحولات السريعة تحسن تجربة المستخدمين و D3 يُحيّز التغيرات على مر الزمن
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);
أفضل الممارسات في مجال الإنتاج - الحد الأدنى دال - 3
الأداء على الوجه الأمثل
For large datasets (thousands of points), direct DOM manipulation becomes slow. Use canvas] rendering via D3-canvas or consider ]WebGL[FL with Library like deck.gl. For SVG-based visuals, reduce DOMT complexity by using [
إمكانية الوصول والمسؤولية
ينبغي أن يكون تصورات التصورات من جانب جميع المستخدمين، شريطة أن تستخدم بطاقات (FLT:22) على عناصر SVG، وأن تستخدم خصائص الوكالة، وأن تدرج طاولة قائمة على النصوص كنتيجة للتراجع، ولتصميم مستجيب، وبُعدات 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 إلى وحدات نموذجية: واحد لجلب البيانات، وواحد للجداول/الضرائب، وواحد للرسم، وواحد للتفاعلات، ويستخدم وحدات الإي إس-6 أو حزمة مثل ويبغ، ويتجنب الخلط بين المنطق D3 وخطابات دورة الحياة الإطارية مباشرة، بدلا من ذلك، يخلق طبقة D3 التي يناديها إطارك.
إدماج دال-3 في الأطر الحديثة
React, Angular, and Vue manage their own DOM. To avoid conflicts, use D3 only for calculations (scales, shapes) and let the framework render the SVG. alternatively, use a dedicated wrapper like or . However, for full control, you can still use D3 inside a (React)
أمثلة عالمية حقيقية وحالات استخدام
D3 powers many high-profile visualization projects: the D3 Gallery on Observable showcases hundreds of examples, from animated choropleths to interactive timelines. News organizations like The New York Times use D3 for custom data stories. In enterprise settings, D3 enables custom dashors for financial data or realtime charts
مثال: متفرقات تفاعلية مع توتبس وبروشينغ
تخيل مجموعة بيانات من 500 نقطة مع X, y, 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);
}
}
موارد التعلم والخطوات التالية
To master D3, start with the official D3.js documentation] and the free tutorials on Observable. Work through the Observable notebooks, which provide live code that you can fork. Also read Interactive Data chart
خاتمة
دال-3-ي لا تزال معيار الذهب لتصوير البيانات التفاعلية حسب الطلب على الشبكة، ويقابل منحنى التعلم الحاد مرونة غير متطابقة وأدائها ودعم المجتمع المحلي، وبتقديم مفاهيمها الأساسية، وملزمة البيانات، والمناولة في الحالات، وبوسعكم بناء صور مرئية تحول البيانات إلى نظرة ثاقبة، وسواء قمتم ببناء خريطة بسيطة للمواضيع أو لوحة بيانات معقدة متعددة الجوانب، فإن إنتاج D3 يتيح لكم أدواتاً ميسراً.