📊 مميز

D3

مكتبة معالجة البيانات وتصويرها منخفضة المستوى (Low-Level Data Visualization Library)

(5/5)
👁️ 4 مشاهدة
📅 02 Jul 2026
🌐 عام

مستوى الخبرة المطلوب:

🚀 محترف
🔗 زيارة الموقع الرسمي
5
تقييم المستخدمين
التصنيف 📊 Charts
المشاهدات 4
تاريخ الإضافة 02/07/2026
آخر تحديث 02/07/2026

📖 الوصف

D3.js (Data-Driven Documents) هي المكتبة الأساسية الأكثر قوة في عالم الرسوم البيانية. بدلاً من تقديم رسومات جاهزة، تقدم D3 primitives لبناء أي نوع من التصورات من الصفر باستخدام HTML, SVG, و CSS مع ربط البيانات بـ DOM. تعتمد عليها معظم المكتبات الأخرى (Recharts, Nivo, Visx) داخلياً. مثالية للمشاريع ...

🎯 يستخدم في

مجالات استخدام هذه الأداة

Custom data visualizations

Infographics تفاعلية

Data journalism

Advanced dashboards

Scientific visualizations

Geographic maps المعقدة

Network graphs

المميزات

أبرز مميزات هذه الأداة

القوة المطلقة في التخصيص

30+ module (modular design)

SVG

Canvas

HTML rendering

DOM manipulation ذكي

Transitions &_animations سلسة

Geographic projections

Layouts (Tree

Treemap

Force

Chord)

Shapes & Curves

Scales (linear

log

time

ordinal)

Large community & ecosystem

Free & Open source (ISC)

⚠️ العيوب

نقاط يجب مراعاتها

×

Learning curve حاد جداً

×

Boilerplate كبير

×

غير مناسبة للمبتدئين

×

وقت تطوير طويل

×

No pre-built chart components

×

Documentation تحتاج خبرة

×

ليس framework (تحتاج knowledge عميق)

×

Performance تحتاج تحسين يدوي أحياناً

🔄 البدائل

أدوات بديلة يمكنك استخدامها

Chart.js
ECharts
Recharts
Visx
Observable Plot

💻 مثال على الاستخدام

كيفية استخدام هذه الأداة

Example Code
<!DOCTYPE html>
<html dir="rtl">
<head>
  <script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
  <svg id="chart" width="600" height="400"></svg>
  
  <script>
    const data = [
      { month: 'يناير', value: 120 },
      { month: 'فبراير', value: 200 },
      { month: 'مارس', value: 150 },
      { month: 'أبريل', value: 280 },
    ];

    const margin = { top: 20, right: 30, bottom: 40, left: 40 };
    const width = 600 - margin.left - margin.right;
    const height = 400 - margin.top - margin.bottom;

    const svg = d3.select('#chart')
      .append('g')
      .attr('transform', `translate(${margin.left},${margin.top})`);

    // Scales
    const x = d3.scaleBand()
      .domain(data.map(d => d.month))
      .range([0, width])
      .padding(0.2);

    const y = d3.scaleLinear()
      .domain([0, d3.max(data, d => d.value)])
      .nice()
      .range([height, 0]);

    // Axes
    svg.append('g')
      .attr('transform', `translate(0,${height})`)
      .call(d3.axisBottom(x));

    svg.append('g')
      .call(d3.axisLeft(y));

    // Bars with animation
    svg.selectAll('.bar')
      .data(data)
      .enter()
      .append('rect')
      .attr('class', 'bar')
      .attr('x', d => x(d.month))
      .attr('width', x.bandwidth())
      .attr('y', height)
      .attr('height', 0)
      .attr('fill', 'steelblue')
      .transition()
      .duration(800)
      .attr('y', d => y(d.value))
      .attr('height', d => height - y(d.value));

    // Force-directed network
    const nodes = [{ id: 'A' }, { id: 'B' }, { id: 'C' }];
    const links = [{ source: 'A', target: 'B' }, { source: 'B', target: 'C' }];

    const simulation = d3.forceSimulation(nodes)
      .force('link', d3.forceLink(links).id(d => d.id))
      .force('charge', d3.forceManyBody().strength(-100))
      .force('center', d3.forceCenter(width / 2, height / 2));

    simulation.on('tick', () => {
      // Update node/link positions
    });
  </script>
</body>
</html>

📚 أدوات أخرى في Charts

قد يعجبك أيضاً