نظرة عامة
مخطط Gantt هو نوع من الرسوم البيانية التي توضح تقسيم مشروع إلى المهام الأساسية له. توضّح مخططات Gantt من Google بداية المهام وانتهائها ومدتها ضمن المشروع، بالإضافة إلى أي تبعيات قد تكون لدى المهمة. يتم عرض مخططات Gantt من Google في المتصفّح باستخدام SVG. مثل جميع الرسوم البيانية في Google، تعرض الرسوم البيانية في Gantt تلميحات للأدوات عندما يمرِّر المستخدم مؤشر الماوس فوق البيانات.
ملاحظة: لن تعمل مخططات Gantt في الإصدارات القديمة من Internet Explorer. (لا يتوافق IE8 والإصدارات الأقدم مع رسومات SVG التي تتطلّبها مخططات Gantt).
مثال بسيط
<html> <head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load('current', {'packages':['gantt']}); google.charts.setOnLoadCallback(drawChart); function daysToMilliseconds(days) { return days * 24 * 60 * 60 * 1000; } function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('string', 'Task ID'); data.addColumn('string', 'Task Name'); data.addColumn('date', 'Start Date'); data.addColumn('date', 'End Date'); data.addColumn('number', 'Duration'); data.addColumn('number', 'Percent Complete'); data.addColumn('string', 'Dependencies'); data.addRows([ ['Research', 'Find sources', new Date(2015, 0, 1), new Date(2015, 0, 5), null, 100, null], ['Write', 'Write paper', null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'], ['Cite', 'Create bibliography', null, new Date(2015, 0, 7), daysToMilliseconds(1), 20, 'Research'], ['Complete', 'Hand in paper', null, new Date(2015, 0, 10), daysToMilliseconds(1), 0, 'Cite,Write'], ['Outline', 'Outline paper', null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research'] ]); var options = { height: 275 }; var chart = new google.visualization.Gantt(document.getElementById('chart_div')); chart.draw(data, options); } </script> </head> <body> <div id="chart_div"></div> </body> </html>
ما مِن اعتماديات
لإنشاء رسم بياني Gantt لا يحتوي على تبعيات، احرص على ضبط القيمة الأخيرة لكل صف في DataTable على null
.
<html> <head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load('current', {'packages':['gantt']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('string', 'Task ID'); data.addColumn('string', 'Task Name'); data.addColumn('string', 'Resource'); data.addColumn('date', 'Start Date'); data.addColumn('date', 'End Date'); data.addColumn('number', 'Duration'); data.addColumn('number', 'Percent Complete'); data.addColumn('string', 'Dependencies'); data.addRows([ ['2014Spring', 'Spring 2014', 'spring', new Date(2014, 2, 22), new Date(2014, 5, 20), null, 100, null], ['2014Summer', 'Summer 2014', 'summer', new Date(2014, 5, 21), new Date(2014, 8, 20), null, 100, null], ['2014Autumn', 'Autumn 2014', 'autumn', new Date(2014, 8, 21), new Date(2014, 11, 20), null, 100, null], ['2014Winter', 'Winter 2014', 'winter', new Date(2014, 11, 21), new Date(2015, 2, 21), null, 100, null], ['2015Spring', 'Spring 2015', 'spring', new Date(2015, 2, 22), new Date(2015, 5, 20), null, 50, null], ['2015Summer', 'Summer 2015', 'summer', new Date(2015, 5, 21), new Date(2015, 8, 20), null, 0, null], ['2015Autumn', 'Autumn 2015', 'autumn', new Date(2015, 8, 21), new Date(2015, 11, 20), null, 0, null], ['2015Winter', 'Winter 2015', 'winter', new Date(2015, 11, 21), new Date(2016, 2, 21), null, 0, null], ['Football', 'Football Season', 'sports', new Date(2014, 8, 4), new Date(2015, 1, 1), null, 100, null], ['Baseball', 'Baseball Season', 'sports', new Date(2015, 2, 31), new Date(2015, 9, 20), null, 14, null], ['Basketball', 'Basketball Season', 'sports', new Date(2014, 9, 28), new Date(2015, 5, 20), null, 86, null], ['Hockey', 'Hockey Season', 'sports', new Date(2014, 9, 8), new Date(2015, 5, 21), null, 89, null] ]); var options = { height: 400, gantt: { trackHeight: 30 } }; var chart = new google.visualization.Gantt(document.getElementById('chart_div')); chart.draw(data, options); } </script> </head> <body> <div id="chart_div"></div> </body> </html>
موارد التجميع
يمكن تجميع المهام المتشابهة بطبيعتها معًا باستخدام الموارد. أضِف عمودًا من النوع string
إلى بياناتك (بعد العمودين Task ID
وTask Name
)، وتأكّد من أنّ أي مهام يجب تجميعها في مورد لها رقم تعريف المورد نفسه. سيتم تجميع الموارد حسب اللون.
<html> <head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load('current', {'packages':['gantt']}); google.charts.setOnLoadCallback(drawChart); function daysToMilliseconds(days) { return days * 24 * 60 * 60 * 1000; } function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('string', 'Task ID'); data.addColumn('string', 'Task Name'); data.addColumn('string', 'Resource'); data.addColumn('date', 'Start Date'); data.addColumn('date', 'End Date'); data.addColumn('number', 'Duration'); data.addColumn('number', 'Percent Complete'); data.addColumn('string', 'Dependencies'); data.addRows([ ['Research', 'Find sources', null, new Date(2015, 0, 1), new Date(2015, 0, 5), null, 100, null], ['Write', 'Write paper', 'write', null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'], ['Cite', 'Create bibliography', 'write', null, new Date(2015, 0, 7), daysToMilliseconds(1), 20, 'Research'], ['Complete', 'Hand in paper', 'complete', null, new Date(2015, 0, 10), daysToMilliseconds(1), 0, 'Cite,Write'], ['Outline', 'Outline paper', 'write', null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research'] ]); var options = { height: 275 }; var chart = new google.visualization.Gantt(document.getElementById('chart_div')); chart.draw(data, options); } </script> </head> <body> <div id="chart_div"></div> </body> </html>
حساب البداية/النهاية/المدة
تقبل مخططات Gantt ثلاث قيم مرتبطة بمدة المهمة: تاريخ البدء وتاريخ الانتهاء والمدّة (بالمللي ثانية). على سبيل المثال، في حال عدم توفّر تاريخ بدء، يمكن أن يحسب الرسم البياني الوقت الناقص استنادًا إلى تاريخ الانتهاء والمدة. وينطبق الأمر نفسه على احتساب تاريخ الانتهاء. إذا تم تحديد تاريخَي البدء والانتهاء، يمكن احتساب المدة بين التاريخَين.
يُرجى الاطّلاع على الجدول أدناه للحصول على قائمة بكيفية تعامل Gantt مع توفُّر بيانات البدء والانتهاء والمدة في ظروف مختلفة.
بدء | إنهاء | المدة | النتيجة |
---|---|---|---|
مشاركة العنصر في وضع العرض التقديمي | مشاركة العنصر في وضع العرض التقديمي | مشاركة العنصر في وضع العرض التقديمي | تأكد من أن المدة متسقة مع أوقات البدء/الانتهاء. تعرض رسالة خطأ إذا كانت غير متّسقة. |
مشاركة العنصر في وضع العرض التقديمي | مشاركة العنصر في وضع العرض التقديمي | خالية | احتساب المدة من وقت البدء ووقت الانتهاء. |
مشاركة العنصر في وضع العرض التقديمي | خالية | مشاركة العنصر في وضع العرض التقديمي | يتم احتساب وقت الانتهاء. |
مشاركة العنصر في وضع العرض التقديمي | خالية | خالية | يعرض رسالة خطأ بسبب تعذّر حساب المدة أو وقت الانتهاء. |
خالية | مشاركة العنصر في وضع العرض التقديمي | مشاركة العنصر في وضع العرض التقديمي | يتم احتساب وقت البدء. |
خالية | خالية | مشاركة العنصر في وضع العرض التقديمي |
لحساب وقت البدء استنادًا إلى التبعيات. بالإضافة إلى defaultStartDate ، يفعِّل هذا الخيار رسم الرسم البياني باستخدام المُدد فقط.
|
خالية | مشاركة العنصر في وضع العرض التقديمي | خالية | يؤدي إلى عرض رسالة خطأ بسبب تعذّر حساب وقت البدء أو المدة. |
خالية | خالية | خالية | تعرض رسالة خطأ بسبب تعذّر حساب وقت البدء أو وقت الانتهاء أو المدة. |
مع وضع ما سبق في الاعتبار، يمكنك إنشاء رسم بياني يعرض رحلة معتادة إلى العمل باستخدام مدة كل مهمة فقط.
<html> <head> <script src="https://www.gstatic.com/charts/loader.js"></script> <script> google.charts.load("current", { packages: ["gantt"] }); google.charts.setOnLoadCallback(drawChart); function toMilliseconds(minutes) { return minutes * 60 * 1000; } function drawChart() { var otherData = new google.visualization.DataTable(); otherData.addColumn("string", "Task ID"); otherData.addColumn("string", "Task Name"); otherData.addColumn("string", "Resource"); otherData.addColumn("date", "Start"); otherData.addColumn("date", "End"); otherData.addColumn("number", "Duration"); otherData.addColumn("number", "Percent Complete"); otherData.addColumn("string", "Dependencies"); otherData.addRows([ [ "toTrain", "Walk to train stop", "walk", null, null, toMilliseconds(5), 100, null, ], [ "music", "Listen to music", "music", null, null, toMilliseconds(70), 100, null, ], [ "wait", "Wait for train", "wait", null, null, toMilliseconds(10), 100, "toTrain", ], [ "train", "Train ride", "train", null, null, toMilliseconds(45), 75, "wait", ], [ "toWork", "Walk to work", "walk", null, null, toMilliseconds(10), 0, "train", ], [ "work", "Sit down at desk", null, null, null, toMilliseconds(2), 0, "toWork", ], ]); var options = { height: 275, gantt: { defaultStartDate: new Date(2015, 3, 28), }, }; var chart = new google.visualization.Gantt( document.getElementById("chart_div") ); chart.draw(otherData, options); } </script> </head> <body> <div id="chart_div"></div> </body> </html>
المسار الحرج
المسار الحرج في مخطط Gantt هو المسار أو المسارات التي تؤثر مباشرةً في
تاريخ الانتهاء. يكون المسار الحرج في مخططات Gantt من Google ملونًا باللون الأحمر تلقائيًا، ويمكن تخصيصه باستخدام خيارات criticalPathStyle
. ويمكنك أيضًا إيقاف المسار الحرج من خلال ضبط criticalPathEnabled
على false
.
var options = { height: 275, gantt: { criticalPathEnabled: true, criticalPathStyle: { stroke: '#e64a19', strokeWidth: 5 } } };
أسهم التصميم
يمكنك تصميم أسهم التبعية بين المهام باستخدام خيارَي gantt.arrow
:
var options = { height: 275, gantt: { criticalPathEnabled: false, // Critical path arrows will be the same as other arrows. arrow: { angle: 100, width: 5, color: 'green', radius: 0 } } };
تنسيق المقاطع الصوتية
يتم التعامل مع تصميم الشبكة من خلال مجموعة من innerGridHorizLine
وinnerGridTrack
وinnerGridDarkTrack
. عند ضبط
innerGridTrack
فقط، سيحسب الرسم البياني لونًا أغمق
للسمة innerGridDarkTrack
، ولكن من خلال ضبط innerGridDarkTrack
فقط،
سيستخدم innerGridTrack
لونه التلقائي ولن يحسب لونًا أفتح.
var options = { height: 275, gantt: { criticalPathEnabled: false, innerGridHorizLine: { stroke: '#ffe0b2', strokeWidth: 2 }, innerGridTrack: {fill: '#fff3e0'}, innerGridDarkTrack: {fill: '#ffcc80'} } };
جارٍ التحميل
اسم حزمة "google.charts.load
" هو "gantt"
.
google.charts.load("current", {packages: ["gantt"]});
اسم فئة العرض المرئي هو google.visualization.Gantt
.
var chart = new google.visualization.Gantt(container);
تنسيق البيانات
الصفوف: يمثّل كل صف في الجدول مهمةً.
الأعمدة:
العمود 0 | العمود 1 | العمود 2 | العمود 3 | العمود 4 | العمود 5 | العمود 6 | العمود 7 | |
---|---|---|---|---|---|---|---|---|
الغرض: | معرّف المهمة | اسم المهمّة | رقم تعريف المورد (اختياري) | بدء | إنهاء | المدة (بالمللي ثانية) | اكتملت العملية بالنسبة المئوية | التبعيات |
نوع البيانات: | سلسلة | سلسلة | سلسلة | التاريخ | التاريخ | الرقم | الرقم | سلسلة |
الدور: | نطاق | البيانات | البيانات | البيانات | البيانات | البيانات | البيانات | البيانات |
خيارات الإعداد
الاسم | النوع | القيمة التلقائية | الوصف |
---|---|---|---|
backgroundColor.fill | سلسلة | "أبيض" | لون تعبئة الرسم البياني، كسلسلة لون HTML. |
gantt.arrow | عنصر | null |
بالنسبة إلى مخططات Gantt،
تتحكم gantt.arrow في الخصائص المختلفة للأسهم التي تربط المهام.
|
gantt.arrow.angle | الرقم | 45 | زاوية رأس السهم. |
gantt.arrow.color | سلسلة | "#000" | لون الأسهم. |
gantt.arrow.length | الرقم | 8 | تمثّل هذه السمة طول رأس السهم. |
gantt.arrow.radius | الرقم | 15 | نصف القطر لتحديد منحنى السهم بين مهمتين. |
gantt.arrow.spaceAfter | الرقم | 4 | مقدار المسافة البيضاء بين رأس السهم والمهمة التي يشير إليها. |
gantt.arrow.width | الرقم | 1.4 | عرض الأسهم. |
gantt.barCornerRadius | الرقم | 2 | نصف القطر لتحديد منحنى زوايا الشريط. |
gantt.barHeight | الرقم | null | تمثّل هذه السمة ارتفاع الأشرطة للمهام. |
gantt.criticalPathEnabled | boolean | صحيح |
إذا كان true أي سهم على المسار الحرج سيتم تصميمه بشكل مختلف.
|
gantt.criticalPathStyle | عنصر | null | كائن يحتوي على نمط أي أسهم مسار حرج |
gantt.criticalPathStyle.stroke | سلسلة | null | لون أي أسهم مسار حرج. |
gantt.criticalPathStyle.strokeWidth | الرقم | 1.4 | سُمك أي أسهم مسار حرج. |
gantt.defaultStartDate | التاريخ/الرقم | null |
إذا تعذّر احتساب تاريخ البدء من القيم في DataTable، سيتم ضبط تاريخ البدء
على هذا التاريخ. يتم قبول قيمة date (new Date(YYYY, M, D) ) أو
رقمًا، وهو عدد المللي ثانية المطلوب استخدامها.
|
gantt.innerGridHorizLine | عنصر | null | تحدد نمط خطوط الشبكة الأفقية الداخلية. |
gantt.innerGridHorizLine.stroke | سلسلة | null | لون خطوط الشبكة الأفقية الداخلية. |
gantt.innerGridHorizLine.strokeWidth | الرقم | 1 | عرض خطوط الشبكة الأفقية الداخلية. |
gantt.innerGridTrack.fill | سلسلة | null |
لون تعبئة مسار الشبكة الداخلية. إذا لم يتم تحديد innerGridDarkTrack.fill ، سيتم تطبيق ذلك على كل مسار شبكة.
|
gantt.innerGridDarkTrack.fill | سلسلة | null | لون التعبئة لمسار الشبكة الداخلية الداكنة البديل |
gantt.labelMaxWidth | الرقم | 300 | الحد الأقصى للمساحة المسموح بها لكل تصنيف مهمة. |
gantt.labelStyle | عنصر | null |
كائن يحتوي على أنماط تصنيفات المهام. labelStyle: { fontName: Roboto2, fontSize: 14, color: '#757575' }, |
gantt.percentEnabled | boolean | صحيح | يملأ شريط المهام استنادًا إلى النسبة المئوية المكتملة من المهمة. |
gantt.percentStyle.fill | سلسلة | null | لون النسبة المئوية للجزء المكتمل من شريط المهام. |
gantt.shadowEnabled | boolean | صحيح |
في حال ضبط هذه السياسة على true ، يتم رسم ظل أسفل كل شريط مهام يتضمّن عناصر تابعة.
|
gantt.shadowColor | سلسلة | "#000" | يحدد لون الظلال تحت أي شريط مهام يحتوي على تبعيات. |
gantt.shadowOffset | الرقم | 1 | يحدد إزاحة الظلال بالبكسل ضمن أي شريط مهام يتضمن تبعيات. |
gantt.sortTasks | boolean | صحيح | تحدِّد هذه السياسة أنّه يجب ترتيب المهام طوبولوجيًا، إذا كانت القيمة صحيحة، وإلا استخدِم الترتيب نفسه المستخدَم في الصفوف المقابلة في DataTable. |
gantt.trackHeight | الرقم | null | تمثّل هذه السمة ارتفاع المسارات. |
العرض | الرقم | عرض العنصر الذي يتضمّنه | عرض الرسم البياني بالبكسل |
الطول | الرقم | ارتفاع العنصر الذي يحتوي على الصورة | ارتفاع المخطط بالبكسل. |
الطُرق
الطريقة | الوصف |
---|---|
draw(data, options) |
لرسم الرسم البياني. لا يقبل الرسم البياني طلبات الطُرق الإضافية إلا بعد تنشيط حدث نوع الإرجاع: لا شيء
|
getSelection() |
تعرض صفيفًا من الكيانات المحددة في الرسم البياني.
الكيانات القابلة للاختيار هي أشرطة وإدخالات وسائل الإيضاح والفئات.
بالنسبة إلى هذا الرسم البياني، يمكن اختيار كيان واحد فقط في أي وقت محدّد.
نوع الإرجاع: مصفوفة من عناصر الاختيار
|
setSelection() |
لاختيار العناصر المحددة في الرسم البياني يؤدي هذا الإجراء إلى إلغاء أي اختيار سابق.
الكيانات القابلة للاختيار هي أشرطة وإدخالات وسائل الإيضاح والفئات.
بالنسبة إلى هذا الرسم البياني، يمكن اختيار كيان واحد فقط في كل مرة.
نوع الإرجاع: لا شيء
|
clearChart() |
يؤدي هذا الإجراء إلى محو الرسم البياني وتحرير جميع الموارد المخصّصة له. نوع الإرجاع: لا شيء
|
الأحداث
حدث | الوصف |
---|---|
click |
يتم الإطلاق عندما ينقر المستخدم داخل الرسم البياني. ويمكن استخدامها لتحديد وقت النقر على العنوان أو عناصر البيانات أو إدخالات وسيلة الإيضاح أو المحاور أو خطوط الشبكة أو التصنيفات. المواقع: targetID
|
error |
يتم إطلاقه عند حدوث خطأ عند محاولة عرض الرسم البياني. الخصائص: المعرّف والرسالة
|
ready |
الرسم البياني جاهز لاستدعاءات الطرق الخارجية. إذا كنت تريد التفاعل مع الرسم البياني
وطرق الاتصال بعد رسمه، عليك إعداد أداة معالجة لهذا الحدث قبل
استدعاء طريقة الخصائص: غير محدّدة
|
select |
يتم الإطلاق عندما ينقر المستخدم على عنصر مرئي. لمعرفة ما تم اختياره، يمكنك الاتصال بالرقم
الخصائص: غير محدّدة
|
سياسة البيانات
تتم معالجة جميع الرموز والبيانات وعرضها في المتصفّح. ولا يتم إرسال أي بيانات إلى أي خادم.