33- كورس تعلم الذكاء الاصطناعي Machine Learning – Plotly.js

استخدام Plotly.js في الرسوم البيانية

تُعد Plotly.js من أشهر مكتبات JavaScript
المستخدمة في رسم البيانات والمخططات داخل المتصفح.
وتوضح الصفحة الأصلية أنها مكتبة قوية تدعم
عددًا كبيرًا من أنواع الرسوم، بما في ذلك
الرسوم ثنائية الأبعاد، وبعض الرسوم الإحصائية،
إضافة إلى أنواع أخرى متعددة يمكن استخدامها
في تطبيقات الذكاء الاصطناعي وتحليل البيانات.

ما هي Plotly.js؟

الفكرة الأساسية في Plotly.js أنها مكتبة تسمح لك
بناء الرسوم البيانية من خلال تعريف
البيانات Data والتخطيط Layout،
ثم عرض النتيجة داخل عنصر HTML محدد.

في معظم الأمثلة المعروضة في الصفحة،
يتم استخدام الدالة التالية لعرض الرسم:

مثال:
Plotly.newPlot(\"myPlot\", data, layout);

وهذا يعني أننا نحتاج عادة إلى:

  • عنصر في الصفحة يحمل المعرف myPlot
  • مصفوفة أو كائن بيانات باسم data
  • كائن تخطيط باسم layout

المخططات المبعثرة Scatter Plots

تبدأ الصفحة بعرض مثال على
Scatter Plot باستخدام Plotly.js.
في هذا المثال يتم تمثيل العلاقة بين:

  • مساحة المنازل على المحور الأفقي
  • السعر على المحور الرأسي

ويتم تعريف البيانات باستخدام قيم x وy،
ثم تحديد أن نمط الرسم هو
markers وأن النوع هو
scatter.

مثال:
const xArray = [50,60,70,80,90,100,110,120,130,140,150];
const yArray = [7,8,8,9,9,9,10,11,14,14,15];

// Define Data
const data = [{
x: xArray,
y: yArray,
mode:\"markers\",
type:\"scatter\"
}];

// Define Layout
const layout = {
xaxis: {range: [40, 160], title: \"Square Meters\"},
yaxis: {range: [5, 16], title: \"Price in Millions\"},
title: \"House Prices vs. Size\"
};

Plotly.newPlot(\"myPlot\", data, layout);

هذا النوع من الرسوم مناسب جدًا عندما نريد عرض البيانات
كنقاط منفصلة ورؤية العلاقة العامة بينها.

الرسوم الخطية Line Graphs

بعد ذلك تنتقل الصفحة إلى رسم
Line Graph.
وهنا يتم استخدام نفس البيانات تقريبًا،
لكن الفرق أن نمط الرسم يصبح:

مثال:
mode: \"lines\"

وبالتالي تتحول النقاط إلى خط متصل بدلًا من نقاط منفصلة.

مثال:
const xArray = [50,60,70,80,90,100,110,120,130,140,150];
const yArray = [7,8,8,9,9,9,10,11,14,14,15];

// Define Data
const data = [{
x: xArray,
y: yArray,
mode: \"lines\",
type: \"scatter\"
}];

// Define Layout
const layout = {
xaxis: {range: [40, 160], title: \"Square Meters\"},
yaxis: {range: [5, 16], title: \"Price in Millions\"},
title: \"House Prices vs Size\"
};

// Display using Plotly
Plotly.newPlot(\"myPlot\", data, layout);

هذا المثال يوضح أن Plotly.js تسمح باستخدام النوع نفسه
مع تغيير بسيط في طريقة العرض فقط.

الرسوم الخطية الرياضية Linear Graphs

تعرض الصفحة بعد ذلك مثالًا على رسم
دالة خطية بدلًا من بيانات ثابتة جاهزة.
في هذا المثال يتم تعريف تعبير رياضي،
ثم توليد قيم x وy باستخدام حلقة.

مثال:
let exp = \"x + 17\";

// Generate values
const xValues = [];
const yValues = [];
for (let x = 0; x <= 10; x += 1) {
yValues.push(eval(exp));
xValues.push(x);
}

// Define Data
const data = [{
x: xValues,
y: yValues,
mode: \"lines\"
}];

// Define Layout
const layout = {title: \"y = \" + exp};

// Display using Plotly
Plotly.newPlot(\"myPlot\", data, layout);

الفكرة هنا أن Plotly.js لا تقتصر على عرض البيانات الموجودة فقط،
بل يمكنها أيضًا رسم نتائج معادلات يتم توليدها برمجيًا.

رسم أكثر من خط Multiple Lines

ثم تعرض الصفحة مثالًا أكثر تقدمًا،
وهو رسم أكثر من خط في نفس المخطط.
في هذا المثال يتم تعريف 3 تعبيرات مختلفة:

مثال:
let exp1 = \"x\";
let exp2 = \"1.5*x\";
let exp3 = \"1.5*x + 7\";

ثم يتم توليد 3 مجموعات من القيم،
ووضعها جميعًا داخل مصفوفة بيانات واحدة.

مثال:
let exp1 = \"x\";
let exp2 = \"1.5*x\";
let exp3 = \"1.5*x + 7\";

// Generate values
const x1Values = [];
const x2Values = [];
const x3Values = [];
const y1Values = [];
const y2Values = [];
const y3Values = [];

for (let x = 0; x <= 10; x += 1) {
x1Values.push(x);
x2Values.push(x);
x3Values.push(x);
y1Values.push(eval(exp1));
y2Values.push(eval(exp2));
y3Values.push(eval(exp3));
}

// Define Data
const data = [
{x: x1Values, y: y1Values, mode:\"lines\"},
{x: x2Values, y: y2Values, mode:\"lines\"},
{x: x3Values, y: y3Values, mode:\"lines\"}
];

// Define Layout
const layout = {title: \"[y=\" + exp1 + \"] [y=\" + exp2 + \"] [y=\" + exp3 + \"]\"};

// Display using Plotly
Plotly.newPlot(\"myPlot\", data, layout);

هذا المثال مفيد جدًا في مقارنة أكثر من علاقة رياضية
أو أكثر من سلسلة بيانات داخل نفس الرسم.

الرسوم العمودية Bar Charts

بعد الرسوم الخطية، تنتقل الصفحة إلى
Bar Charts.
وهنا يتم تعريف أسماء الدول على المحور الأفقي،
وكميات الإنتاج على المحور الرأسي.

مثال:
const xArray = [\"Italy\",\"France\",\"Spain\",\"USA\",\"Argentina\"];
const yArray = [55, 49, 44, 24, 15];

const data = [{
x: xArray,
y: yArray,
type: \"bar\"
}];

const layout = {title:\"World Wide Wine Production\"};

Plotly.newPlot(\"myPlot\", data, layout);

هذا النوع من الرسوم مفيد للمقارنات المباشرة
بين قيم منفصلة أو فئات متعددة.

الرسوم العمودية الأفقية Horizontal Bar Charts

توضح الصفحة أيضًا أنه يمكن تحويل الأعمدة إلى
شكل أفقي بإضافة خاصية:

مثال:
orientation: \"h\"

وفي هذه الحالة يتم عكس دور x وy بحيث تصبح
القيم الرقمية على المحور الأفقي،
والفئات النصية على المحور الرأسي.

مثال:
const xArray = [55, 49, 44, 24, 15];
const yArray = [\"Italy\",\"France\",\"Spain\",\"USA\",\"Argentina\"];

const data = [{
x: xArray,
y: yArray,
type: \"bar\",
orientation: \"h\"
}];

const layout = {title:\"World Wide Wine Production\"};

Plotly.newPlot(\"myPlot\", data, layout);

الرسوم الدائرية Pie Charts

بعد ذلك تعرض الصفحة طريقة تحويل نفس البيانات
إلى Pie Chart.
وتوضح أن التغيير الأساسي هنا هو استبدال
x وy بـ:

  • labels
  • values

مع تغيير النوع إلى:

مثال:
type: \"pie\"

والشكل البرمجي يكون كالتالي:

مثال:
const data = [{
labels: xArray,
values: yArray,
type: \"pie\"
}];

مخططات Donut

ثم توضّح الصفحة أن تحويل الرسم الدائري إلى
Donut Chart
يحتاج فقط إلى إضافة فتحة داخلية باستخدام:

مثال:
hole: .4

ليصبح المثال كالتالي:

مثال:
const data = [{
labels: xArray,
values: yArray,
hole: .4,
type: \"pie\"
}];

وهذا يوضح أن Plotly.js تسمح بتعديل شكل الرسم
بإضافات بسيطة جدًا دون تغيير جذري في الكود.

رسم المعادلات Plotting Equations

في الجزء الأخير، تعرض الصفحة مثالًا على
رسم معادلة رياضية مباشرة.
وفي هذا المثال يتم استخدام:

مثال:
let exp = \"Math.sin(x)\";

ثم يتم توليد قيم كثيرة بين 0 و10
بخطوة صغيرة مقدارها 0.1،
وبعد ذلك رسمها بخط متصل.

مثال:
let exp = \"Math.sin(x)\";

// Generate values
const xValues = [];
const yValues = [];
for (let x = 0; x <= 10; x += 0.1) {
yValues.push(eval(exp));
xValues.push(x);
}

// Display using Plotly
const data = [{x:xValues, y:yValues, mode:\"lines\"}];
const layout = {title: \"y = \" + exp};
Plotly.newPlot(\"myPlot\", data, layout);

هذا المثال يوضح أن Plotly.js ليست فقط لعرض بيانات جاهزة،
بل يمكن استخدامها أيضًا لتصور سلوك الدوال والمعادلات الرياضية.

ما الذي يميز Plotly.js؟

من خلال أمثلة الصفحة يتضح أن Plotly.js تتميز بأنها:

  • تدعم أكثر من نوع من الرسوم داخل نفس المكتبة
  • تسمح باستخدام البنية نفسها تقريبًا مع تغييرات بسيطة
  • مناسبة للبيانات المبعثرة والخطوط والأعمدة والدوائر
  • مناسبة أيضًا لرسم المعادلات الرياضية

وهذا يجعلها خيارًا قويًا جدًا في مشاريع الذكاء الاصطناعي
وعرض النتائج التعليمية أو التحليلية داخل الويب.

الخلاصة

يوضح هذا الدرس أن Plotly.js مكتبة قوية
لرسم البيانات في JavaScript، وتسمح بإنشاء أنواع متعددة
من الرسوم مثل:
Scatter Plots وLine Graphs
وLinear Graphs وMultiple Lines
وBar Charts وHorizontal Bar Charts
وPie Charts وDonut Charts
وحتى رسم المعادلات الرياضية.
كما توضح الصفحة أن فكرة Plotly.js الأساسية تعتمد
على تعريف data وlayout
ثم عرض الرسم باستخدام
Plotly.newPlot().