برنامه سازی وب، دانشگاه صنعتی شریف
ارائه دهنده درس: جناب آقای امید جعفری نژاد
نویسندگان: آرین احدی نیا، محمد جعفری
Chart.js یک کتابخانه متن باز برای بصری سازی و نمایش داده ها در صفحات HTML به کمک JavaScript است. در این مقاله Chart.js را معرفی میکنیم و استفاده دقیق و اصولی از آن را کمک مثال های متنوع با اتکا بر مستندات Chart.js بیان می کنیم. ابتدا برای بدست آوردن کلیت یک مثال ساده را مطرح کنیم. سپس در ادامه به سمت اصول و منطق این کتابخانه میرویم.
کدهایی که منجر به خروجی های نمایش داده شده در تصاویر این مقاله هستند، در پوشه examples قرار داده شده اند.
برای شروع کار با این کتابخانه 3 بخش داریم بخش اول 1- HTML 2- CDN or install 3- JS code که در پایین قرار دارد
البته در این کد CDN استفاده شده
<div>
<canvas id="myChart"></canvas>
</div>
<!-- -------------------------------- -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<!-- -------------------------------- -->
<script>
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
در بخش اول یک تگ کنوا داریم که در واقع صرفا برای پر شدن است
در بخش دوم ار CDN این کتابخانه استفاده میکنیم تا بتونیم از قابلیت های اون استفاده کنیم
در بخش اخر کدی را نوشتیم تا زمودار زیر را خروجی دهد
ابتدا المنت خود را به ان میدهیم تا بتواند تگی مه باید آن را پپر کند بشناسیم سپس نوع نموداری که میخواهیم درست کنیم رو اضافه میکنیم
type: 'bar',
سپس دیتای های مورد نیاز نمودار را به ان میدهیم
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
borderWidth: 1
}]
},
در بخش انتهایی هم شروع اعداد ردیف هارا طوری تعریف میکنیم که از صفر شروع شد
options: {
scales: {
y: {
beginAtZero: true
}
}
}
برای نصب و ادغام و استفاده از Chart.js راه های متعددی وجود دارد. این راه ها را در ادامه به تفصیل توضیح خواهیم داد، پیش از آن میخواهیم نحوه انتخاب ساخت مناسب این کتابخانه را بیان کنیم.
دو ساخت (build) برای این کتابخانه وجود دارد: stand-alone و bundled. انتخاب ساخت درست، بستگی به استفاده از moment.js دارد.
این ساخت تمامی ویژگی های استاندارد این کتابخانه را دارد، تنها نکته این نسخه این است که اگر از ویژگی های مربوط به محور زمانی میخواهید استفاده کنید، باید کتابخانه moment.js را به صورت جداگانه اضافه کنید. فایل های مربوط به این ساخت عبارتند از:
dist/Chart.js
dist/Chart.min.js
این ساخت شامل تمامی ویژگی های stand-alone به همراه کتابخانه moment.js است. بنابرین با استفاده از این ساخت برای استفاده از ویژگی های محور زمانی نیازی به اضافه کردن جداگانه moment.js نیست. فایل های مربوط به این ساخت عبارتند از:
dist/Chart.bundle.js
dist/Chart.bundle.min.js
اگر از ویژگی های محور زمانی استفاده نمیکنید، استفاده از stan-alone توصیه میشود. اگر از این ویژگی استفاده میکنید میتوانید از ساخت bundled استفاده کنید. اما توجه کنید که اگر به دلیل دیگری از کتابخانه moment.js استفاده میکنید، بهتر است که از همان ساخت stand-alone استفاده کنید چرا که در صورت استفاده از bundled در حقیقت دوبار moment.js به پروژه اضافه میشود و این موضوع می تواند موجب افزایش زمان بارگیری صفحه و بار شبکه بشود. لازم به ذکر است که کتابخانه moment.js در ساخت bundled به صورت خصوصی به پروژه اضافه خواهد شد و از moment.js که توسط ساخت bundled به پروژه اضافه شده است، نمی توان برای منظور دیگری استفاده کرد.
npm install chart.js --save
bower install chart.js --save
فایل های ساخت (built files) این کتابخانه در آدرس زیر موجود است.
https://cdnjs.com/libraries/Chart.js
فایل های ساخت (built files) این کتابخانه در آدرس زیر موجود است.
https://www.jsdelivr.com/package/npm/chart.js?path=dist
رویکرد پنجم: دانلود مستقیم GitHub
میتوانید آخرین نسخه از Chart.js را به صورت مستقیم از صفحه GitHub این پروژه دانلود کنید. توجه کنید که در صورت استفاده از این روش باید پروژه را Build کنید تا فایل های dist برای استفاده بدست بیایند. لذا استفاده از روش جایگزین قویا توصیه میشود.
با روش های مختلف، جاوااسکیریپ خام و یا Module Loader های مختلف میتوانیم Chart.js را در پروژه ادغام کنیم.
<script src="path/to/chartjs/dist/Chart.js"></script>
var Chart = require('chart.js');
import Chart from 'chart.js';
در صورتی که از این روش استفاده می کنید، به صورت خودکار moment.js اضافه خواهد شد. میتوانید با استفاده از externals برای Webpack و یا external برای Rollup، تنظیم کنید تا Moment.js اضافه نشود.
Webpack:
{
externals: {
moment: 'moment'
}
}
Rollup:
{
external: ['moment']
}
در صورتی که از Content Security Policy (CSP) استفاده بکنید، Chart.js برای بارگیری CSS های مربوطه نیاز به تنظیمات بیشتر دارد. در این صورت باید در تنظیمات دسترسی style-src 'unsafe-inline
داده شود. برای سیاست های بستهتر، زمانی که فقط style-src self
مجاز شمرده میشود، لازم است که به صورت دستی CSS به پروژه اضافه شود:
<link rel="stylesheet" type="text/css" href="path/to/chartjs/dist/Chart.min.css">
Chart.platform.disableCSSInjection = true;
کتابخانه Chart.Js تماما توسط المان های موجود در canvas ساخته شده است و نحوه ساختن نمودار کاملا به کاربر بستگی دارد. المان canvas نیز در تمامی مرورگر ها پشتیبانی میشود اما محتوای آن برای صفحهخوان ها در دسترس نیست.
نمونه هایی از المان های قابل دسترسی canvas
با ست کردن role و aria-label، این canvas یک نام قابل دسترس دارد.
<canvas id="goodCanvas1" width="400" height="100" aria-label="Hello ARIA World" role="img"></canvas>
المان canvas یک متن جایگزین نیز دارد که توسط محتوای fallback تعیین میشود.
<canvas id="okCanvas2" width="400" height="100">
<p>Hello Fallback World</p>
</canvas>
وقتی صحبت از تغییر سایز نمودار بر حسب طول صفحه میشود، یکی زا بزرگترین محدودیت هایی که به سراغ ما میآید این است که مقادیر طول و ارتفاع canvas نمیتواند با مقادیر نسبی شرح داده شود. به همین دلیل سایز صفحه از سایز canvas مستقل است و نمودار به صورت خودکار نمیتواند سایز خود را تغییر دهد و این صفحه ما را به نحوی نامتناسب میکند.
لایبرری Chart.Js امکاناتی فراهم کرده که به ما امکان
واکنشگرایی و تغییر سایز نمودار بر اساس سایز صفحه را میدهد.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
responsive | boolean | TRUE | بوم نمودار را وقتی که container آن تغییر اندازه دهد، ریسایز میکند. |
responsiveAnimationDuration | number | 0 | مدت زمانی که انیمیشن تغییر سایز طول می کشد. |
maintainAspectRatio | boolean | TRUE | در صورت فعال بودن نسبت ارتفاع و طول را با تغییر اندازه حفظ می کند. |
aspectRatio | number | 2 | نسبت طول تصویر بر ارتفاع |
onResize | function | null | در هنگام تغییر سایز فراخوانده می شود |
در حالت پیشفرض canvas نسبت پیکسل یک به یک دارد. در مواقعی که نمودار به bitmap صفحهای با dpi بالاتر این امکان وجود دارد که آن را رزولوشنی بالاتر از حد معمول استخراج کرد.
تنظیم کردن مقدار devicePixelRatio بر مقداری غیر از 1، canvas را مجبور به تغییر ابعاد میکند.
مقداری که وابسته به ابعاد container است.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
devicePixelRatio | number | window.devicePixelRatio | رونویسی مقدار پیشفرض نسبت پیکسلی |
تنظیمات hover به نیماسپیس options.hover پاس داده شده است. همچنین تنظیمات سراسری این بخش در قسمت Chart.defaults.global.hover جای داده شده است.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
mode | string | 'nearest' | تعیین میکند کدام المان ها در tooltip قرار داده میتوضیحاتشوند. |
intersect | boolean | TRUE | در صورت فعال بودن افکت hover تنها در صورتی عمل می کند که المان با چارت اشتراکتداخل داشته باشد. |
axis | string | 'x' | می تواند به مقادیر 'x', 'y' یا 'xy' ست شود تا تعیین کند کدام جهت در محاسبه فاصله ها استفاده شده است. |
animationDuration | number | 400 | مدت زمانی که انیمیشن hover طول میکشد به میلی ثانیه. |
لازم به ذکر است با استفاده از event ها می توان این موارد را بهتر و بیشتر نیز کنترل کرد. همچنین مطالعه حالت هایی که گراف میتواند در آن قرار داشته باشد در این امر کمک شایانی به ما میکند.
امکانات اسکریپت پذیر تابعی دارند که برای هر یک از مقادیر داده صدا زده میشود و یک آرگومان context به عنوان ورودی میگیرد.
color: function(context) {
var index = context.dataIndex;
var value = context.dataset.data[index];
return value < 0 ? 'red' : // draw negative values in red
index % 2 ? 'blue' : // else, alternate values in blue and green
'green';
}
امکانات اشاره پذیر آرایه ای میگیرند که هر المان به ایندکس متناظر آن لینک شده است. توجه کنید که در این شیوه باید تعداد داده ها با آیتم ها برابر باشد. به طور کلی استفاده از توابع راه منطقی تری است.
color: [
'red', // color for data at index 0
'blue', // color for data at index 1
'green', // color for data at index 2
'black', // color for data at index 3
//...
]
این شی دارای ویژگی های زیر است.
- chart: نمودار مورد نظر
- dataIndex: ایندکس داده فعلی
- dataset: دیتاست موجود در ایندکس
- datasetIndex: ایندکس دیتاست فعلی
- hover: فعال در صورت hover شدن
در هنگام استفاده از امکانات نمودار، فرمت های متفاوتی وجود دارد که میتوان به کمک آنها رنگ را تعیین کرد. اگر بخشی نیاز به رنگ داشت و رنگی مشخص نشده بود، chart.js از مقدار پیشفرض که رنگ سیاه است استفاده میکند.
یکی از گزینه های جایگزین استفاده از رنگ استفاده از آبجکت های CanvasPattern یا CanvasGradient است.
برای مثال اگر بخواهیم یک دیتاست را با یک پترن از یک تصویر پر کنیم داریم :
var img = new Image();
img.src = 'https://example.com/my_image.png';
img.onload = function() {
var ctx = document.getElementById('canvas').getContext('2d');
var fillPattern = ctx.createPattern(img, 'repeat');
var chart = new Chart(ctx, {
data: {
labels: ['Item 1', 'Item 2', 'Item 3'],
datasets: [{
data: [10, 20, 30],
backgroundColor: fillPattern
}]
}
});
};
استفاده از پترن ها بعضا می تواند به مخاطبان با ناتوانی چشمی کمک کند.
با استفاده از کتابخانه Patternomaly می توان پترن تولید کرد و دیتاست ها را با آن پر کرد.
var chartData = {
datasets: [{
data: [45, 25, 20, 10],
backgroundColor: [
pattern.draw('square', '#ff6384'),
pattern.draw('circle', '#36a2eb'),
pattern.draw('diamond', '#cc65fe'),
pattern.draw('triangle', '#ffce56')
]
}],
labels: ['Red', 'Blue', 'Purple', 'Yellow']
};
به طور کلی 4 نوع حالت پیشفرض موجود است که به کمک آن میتوان فونت داده ها را عوض کرد. این حالت ها در Chart.defaults.global قرار دارند.
برای مثال در کد زیر تمام متن ها به جز حاشیه نویسی ها قرمز هستند.
Chart.defaults.global.defaultFontColor = 'red';
let chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
legend: {
labels: {
// This more specific font property overrides the global property
fontColor: 'black'
}
}
}
});
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
defaultFontColor | Color | '#666' | رنگ پیشفرض تمام متن ها |
defaultFontFamily | string | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | فونت پیشفرض تمام متن ها |
defaultFontSize | number | 12 | سایز پیشفرض فونت ها |
defaultFontStyle | string | 'normal' | استایل پیشفرض فونت ها |
نمودارهای Chart.js در المان canvas رندر میشوند که این فرایند را بسیار سزیع میسازد.
برای دیتاست های بزرگ و حجیم نیز که سرعت برنامه در آن حائذ اهمیت است می توانیم با انجام کارهایی مانند غیر فعال کردن انمیشن، فشرده سازی داده، غیر فعال کردن منحنی ها و غیر فعال کردن کشیدن خط، کارایی برنامه را تا حد قابل توجهی افزایش دهیم.
مدل های (type) اصلی نمودار در این کتابخانه عبارتند از:
- خطی (line)
- ستونی (bar)
- راداری (radar)
- دوناتی (doughnut) و دایره ای (pie)
- حلقوی (polar area)
- حبابی (bubble)
- نقطه ای (scatter)
در رابطه با هر کدام، توضیحاتی را مطرح خواهیم کرد و مثال هایی را برای فهم بهتر ارائه خواهیم داد.
برای رسم نمودار ها باید ابجکتی از محتویات و تنظمیات این نمودار بسازیم. این ابجکت سه فیلد اصلی باید داشته باشد. به عنوان مثال:
conf = {
type: '...',
data: {...},
option: {...}
}
تنظیمات مربوط به نمودار در فیلد option و دیتای مربوط و تنظیمات مربوط در فیلد data قرار میگیرد. همانگونه که در مثال اول قابل مشاهده است، تنظیمات مربوط به رنگ دیتاها در فیلد دیتا قرار میگیرد.
سپس می توانیم با پاس دادن این فیلد به کانستراکتور، نمودار مورد نظر را بسازیم.
let chart = new Chart(document.getElementById("chartID"), conf);
نمودار های خطی برای نمایش تعدادی نقاط که به هم از طریق خط مرتبط میشوند، است. این نمودار عموما برای نشان دادن تغییرات یا مقایسه استفاده میشود.
type: 'line'
در نمودار خطی، مانند سایر نمودار ها، شما می توانید مواردی را کنترل کنید تا نمودار به شکل دلخواه شما در بیاید.
به دو فرم مختلف می توانیم به این نوع نمودار، داده های مربوط به هر Dataset را بدهیم:
در این فرمت، آرایه ای از نقاط را به عنوان دیتا میدهیم. هر نقطه ابجکتی است که شامل مختصه های طولی و عرضی میباشد.
{
x: number,
y: number
}
مثال:
data: {
datasets: [{
data: [{
x: 1,
y: 1
}, {
x: 2,
y: 2
}, {
x: 3,
y: 3
}]
}]
}
در این فرمت، هر نقطه به label متناظر مرتبط میشود. در این فرمت باید آرایه ای از اعداد را به عنوان دیتا بدهیم. مثال:
data: {
labels: ["A", "B", "C"]
datasets: [{
data: [1, 2, 3]
}]
}
بدیهی است که در این نوع، باید labels نیز برای نمودار تعریف شود.
میتوانیم مقادیر پیشفرض رسم این نوع نمودار را از آدرس
Chart.defaults.line
تغییر دهیم.
بعد از تغییر، نمودار های جدید با مقادیر پیشفرض جدید رسم میشوند، اما نمودار هایی که پیشتر تولید شده اند، بدون تغییر میمانند.
برای هر دیتاست، میتوانیم تنظیماتی را در نمودار های خطی کنترل کنیم، تنظیماتی اعم از نحوه نمایش، الویت رسم و نحوه پاسخگویی به وقایع (event). در جداول زیر این موارد را نام میبریم. توجه کنید که این تنظیمات میتوانند به صورت جداگانه برای هر Dataset انجام شود.
نام فیلد | نوع | اسکیریپ پذیر | ایندکس پذیر | مقدار پیشفرض |
---|---|---|---|---|
backgroundColor | Color | بله | خیر | rgba(0, 0, 0, 0.1) |
borderCapStyle | string | بله | خیر | butt |
borderColor | Color | بله | خیر | rgba(0, 0, 0, 0.1) |
borderDash | number[] | بله | خیر | [] |
borderDashOffset | number | بله | خیر | 0 |
borderJoinStyle | string | بله | خیر | miter |
borderWidth | number | بله | خیر | 3 |
cubicInterpolationMode | string | بله | خیر | default |
clip | number | object | خیر | خیر |
fill | boolean | string | بله | خیر |
hoverBackgroundColor | Color | بله | خیر | undefined |
hoverBorderCapStyle | string | بله | خیر | undefined |
hoverBorderColor | Color | بله | خیر | undefined |
hoverBorderDash | number[] | بله | خیر | undefined |
hoverBorderDashOffset | number | بله | خیر | undefined |
hoverBorderJoinStyle | string | بله | خیر | undefined |
hoverBorderWidth | number | بله | خیر | undefined |
label | string | خیر | خیر | '' |
lineTension | number | خیر | خیر | 0.4 |
order | number | خیر | خیر | 0 |
pointBackgroundColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
pointBorderColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
pointBorderWidth | number | بله | بله | 1 |
pointHitRadius | number | بله | بله | 1 |
pointHoverBackgroundColor | Color | بله | بله | undefined |
pointHoverBorderColor | Color | بله | بله | undefined |
pointHoverBorderWidth | number | بله | بله | 1 |
pointHoverRadius | number | بله | بله | 4 |
pointRadius | number | بله | بله | 3 |
pointRotation | number | بله | بله | 0 |
pointStyle | string | Image | بله | بله |
showLine | boolean | خیر | خیر | undefined |
spanGaps | boolean | خیر | خیر | undefined |
steppedLine | boolean | string | خیر | خیر |
xAxisID | string | خیر | خیر | first x axis |
yAxisID | string | خیر | خیر | first y axis |
توضیحات بیشتر درباره موارد فوق را میتوانید در جداول زیر مشاهده کنید.
نام فیلد | توضیحات |
---|---|
label | برچسب (label) دیتاست که در legend و tooltip نمایش داده میشود. |
order | الویت رسم دیتاست. توجه کنید که این الویت بر legend و tooltip نیز تاثیر میگذارد. |
xAxisID | شناسه محور X این این دیتاست بر روی آن نمودار میشود (برای نمودار های چند محوره) |
yAxisID | شناسه محور Y این این دیتاست بر روی آن نمودار میشود (برای نمودار های چند محوره) |
نام فیلد | توضیحات |
---|---|
pointBackgroundColor | رنگ پرکننده نقاط. |
pointBorderColor | رنگ مرز نقاط. |
pointBorderWidth | ضحامت مرز نقاط بر مبنای px. |
pointHitRadius | سایر پیکسلی نقاط نمایش داده نشده برای واکنش نشان دادن به حرکات نشانگر. |
pointRadius | شعاع نقاط. اگر صفر باشد نقطه نمایش داده نخواهد شد. |
pointRotation | میزان دوران نقاط |
pointStyle | شکل نقاط |
نام فیلد | توضیحات |
---|---|
pointHoverBackgroundColor | رنگ پرکننده نقاط زمانی که نشانگر بر روی آن است. |
pointHoverBorderColor | رنگ مرز نقاط زمانی که نشانگر بر روی آن است. |
pointHoverBorderWidth | ضخامت مرز نقاط زمانی که نشانگر بر روی آن است. |
pointHoverRadius | شعاع نقاط زمانی که نشانگر بر روی آن است. |
نام فیلد | توضیحات |
---|---|
backgroundColor | رنگ پر کننده خط |
borderCapStyle | ظاهر انتهای خط |
borderColor | رنگ خط |
borderDash | طول و فاصله گذاری خط تیره ها (در صورت نیاز) |
borderDashOffset | offset خط تیره ها |
borderJoinStyle | ظاهر LineJoin |
borderWidth | عرض خط بر مبنای پیکسل |
fill | پر کردن زیر خط |
showLine | تنظیم می کند که آیا خط برای این دیتاست رسم شود یا نشود. |
spanGaps | در صورت True بودن، موجب فاصله انداختن NaN و Null در خط میشود، در صورتی که False باشد، خط پیوستگی خود را حفظ خواهد کرد. |
از موارد فوق میتوان به عنوان option استفاده کرد تا نمودار مطلوب را بدست آورد.
نام | نوع | مقدار پیشفرض | توضیحات |
---|---|---|---|
showLines | boolean | TRUE | آیا خط واصل نقاط رسم شود یا نه. |
spanGaps | boolean | FALSE | آیا NaN در خط واصل نقاط شکستگی ایجاد کند یا نکند. |
type: 'radar'
نمودار های راداری اغلب برای مقایسه چند مجموعه داده مرتبط به هم به کار میروند.
داده های هر Dataset در نمودار های راداری، آرایه ای از اعداد است. که به label هم index مربوط میشود. مثال:
data: {
labels: [A, B, C]
datasets: [{
data: [1, 2, 3]
}]
}
میتوانیم مقادیر پیشفرض رسم این نوع نمودار را از آدرس
Chart.defaults.radar
تغییر دهیم.
بعد از تغییر، نمودار های جدید با مقادیر پیشفرض جدید رسم میشوند، اما نمودار هایی که پیشتر تولید شده اند، بدون تغییر میمانند.
برای هر دیتاست، میتوانیم تنظیماتی را در نمودار های راداری کنترل کنیم، تنظیماتی اعم از نحوه نمایش، الویت رسم و نحوه پاسخگویی به وقایع (event). در جداول زیر این موارد را نام میبریم. توجه کنید که این تنظیمات میتوانند به صورت جداگانه برای هر Dataset انجام شود.
نام فیلد | نوع | اسکیریپ پذیر | ایندکس پذیر | مقدار پیشفرض |
---|---|---|---|---|
backgroundColor | Color | بله | خیر | rgba(0, 0, 0, 0.1) |
borderCapStyle | string | بله | خیر | butt |
borderColor | Color | بله | خیر | rgba(0, 0, 0, 0.1) |
borderDash | number[] | بله | خیر | [] |
borderDashOffset | number | بله | خیر | 0 |
borderJoinStyle | string | بله | خیر | miter |
borderWidth | number | بله | خیر | 3 |
hoverBackgroundColor | Color | بله | خیر | undefined |
hoverBorderCapStyle | string | بله | خیر | undefined |
hoverBorderColor | Color | بله | خیر | undefined |
hoverBorderDash | number[] | بله | خیر | undefined |
hoverBorderDashOffset | number | بله | خیر | undefined |
hoverBorderJoinStyle | string | بله | خیر | undefined |
hoverBorderWidth | number | بله | خیر | undefined |
fill | boolean | string | بله | خیر |
label | string | خیر | خیر | empty string |
order | number | خیر | خیر | 0 |
lineTension | number | خیر | خیر | 0 |
pointBackgroundColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
pointBorderColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
pointBorderWidth | number | بله | بله | 1 |
pointHitRadius | number | بله | بله | 1 |
pointHoverBackgroundColor | Color | بله | بله | undefined |
pointHoverBorderColor | Color | بله | بله | undefined |
pointHoverBorderWidth | number | بله | بله | 1 |
pointHoverRadius | number | بله | بله | 4 |
pointRadius | number | بله | بله | 3 |
pointRotation | number | بله | بله | 0 |
pointStyle | string | Image | بله | بله |
spanGaps | boolean | خیر | خیر | undefined |
توضیحات بیشتر درباره موارد فوق را میتوانید در جداول زیر مشاهده کنید.
نام فیلد | توضیحات |
---|---|
label | نام دیتاست که در legend و tooltip ظاهر میشود. |
order | الویت رسم. |
نام فیلد | توضیحات |
---|---|
pointBackgroundColor | رنگ پرکننده نقاط |
pointBorderColor | رنگ مرزی نقاط |
pointBorderWidth | ضخامت مرز نقاط |
pointHitRadius | اندازه پیکسلی نقاط نمایش داده نشده برای واکنش به ماوس |
pointRadius | شعاع نقاط، اگر صفر باشد نقطه نمایش داده نمیشود |
pointRotation | دوران نقاط |
pointStyle | شکل نقاط |
Name | Description |
---|---|
backgroundColor | رنگ پرکننده خطوط |
borderCapStyle | شکل انتهایی خطوط |
borderColor | رنگ خطوط |
borderDash | طول و فاصله خط تیره ها (در صورت نیاز) |
borderWidth | ضخامت خطوط بر مبنای پیکسل |
fill | پر کردن زیر خط |
spanGaps | اگر false باشد، دیتای NaN یا Null موجب شکستگی در خط میشود، در غیر این صورت، خط پیوستگی خود را حفظ میکند. |
توجه کنید که spanGaps را options نیز میتوانیم تعریف کنیم.
نام فیلد | توضیحات |
---|---|
pointHoverBackgroundColor | رنگ زمینه نقاط وقتی نشانگر بر روی آن است. |
pointHoverBorderColor | رنگ مرز نقاط وقتی نشانگر بر روی آن است. |
pointHoverBorderWidth | ضخامت مرز نقاط وقتی نشانگر بر روی آن است. |
pointHoverRadius | شعاع نقاط وقتی نشانگر بر روی آن است. |
type: 'pie'
type: 'doughnut'
نمودار های دایره ای و دوناتی در ماهیت یک چیز هستند اما در نحوه نمایش تفاوت اندکی دارند. در این دو نوع نمودار قطاع یا کمان هایی از دایره برای نمایش مقدار نسبی هر داده نسبت به دیگر داده ها به کار میرود.
در این کتابخانه نمودار دوناتی، در واقع همان نمودار دایره ای است. تنها تفاوت این دو نوع این است که مقدار پیشفرض cutoutPercentage در نمودار دایره ای 0 و در نمودار دوناتی 50 تنظیم شده است.
اما توجه کنید که این دو نوع از یکدیگر جدا هسنند و با تغییر دادن مقادیر پیشفرض یکی دیگری تغییر نمیکند.
داده های این دو نوع نمودار، آرایه ای از اعداد است. مثال:
data = {
datasets: [{
data: [10, 20, 30]
}]
}
میتوانیم مقادیر پیشفرض رسم این نوع نمودار را از آدرس
Chart.defaults.pie
Chart.defaults.doughnut
تغییر دهیم.
بعد از تغییر، نمودار های جدید با مقادیر پیشفرض جدید رسم میشوند، اما نمودار هایی که پیشتر تولید شده اند، بدون تغییر میمانند.
برای هر دیتاست، میتوانیم تنظیماتی را در نمودار های دایره ای و دوناتی کنترل کنیم، تنظیماتی اعم از نحوه نمایش، الویت رسم و نحوه پاسخگویی به وقایع (event). در جداول زیر این موارد را نام میبریم. توجه کنید که این تنظیمات میتوانند به صورت جداگانه برای هر Dataset انجام شود.
نام فیلد | نوع | اسکیریپ پذیر | ایندکس پذیر | مقدار پیشفرض |
---|---|---|---|---|
backgroundColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
borderAlign | string | بله | بله | center |
borderColor | Color | بله | بله | #fff |
borderWidth | number | بله | بله | 2 |
data | number[] | خیر | خیر | required |
hoverBackgroundColor | Color | بله | بله | undefined |
hoverBorderColor | Color | بله | بله | undefined |
hoverBorderWidth | number | بله | بله | undefined |
weight | number | خیر | خیر | 1 |
توضیحات بیشتر درباره موارد فوق را میتوانید در جداول زیر مشاهده کنید.
نام فیلد | توضیحات |
---|---|
backgroundColor | رنگ زمینه قطاع. |
borderColor | زنگ مرز قطاع |
borderWidth | ضخامت مرز قطاع بر مبنای px. |
weight | ضخامت نسبی دیتاست که مقدار دهی به آن باعث میشود دیتاست ها با یک ضخامت نسبی نسبت به هم چاپ شوند. |
نام فیلد | توضیحات |
---|---|
hoverBackgroundColor | رنگ زمینه قطاع هنگامی که نشانگر بر روی آن است. |
hoverBorderColor | رنگ مرز قطاع هنگامی که نشانگر بر روی آن است |
hoverBorderWidth | ضخامت مرز قطاع هنگامی که نشانگر بر روی آن است بر مبنای px. |
از موارد فوق میتوان به عنوان option استفاده کرد تا نمودار مطلوب را بدست آورد.
نام فیلد | نوع | مقدار پیشفرض | توضیحات |
---|---|---|---|
cutoutPercentage | number | دایره ای: 0، دوناتی: 50 | درصد مساحت خالی میانی |
rotation | number | -0.5 * Math.PI | زاویه شروع رسم اولین قطاع |
circumference | number | 2 * Math.PI | زاویه کل قطاع ها، 2Pi برابر دایره کامل است. |
animation.animateRotate | boolean | TRUE | در صورت درست بودن نمودار با انیمیشن دورانی نمایش داده میشود. |
animation.animateScale | boolean | FALSE | در صورت درست بودن، نمودار با انیمیشین از مرکز بزرگ میشود. |
دو مقدار مجاز برای borderAlign وجود دارد:
center
inner
در صورتی که گزینه center انتخاب شود، مرز قطاع های همجوار با یک دیگر همپوشانی خواهد داشت اما در صورتی که گزینه inner انتخاب شود، تضمین میشود که مرز ها با یک دیگر همپوشانی نخواهند داشت. توجه کنید که مقدار پیشفرض این تنظیم، center است.
type: 'polarArea'
نمودار قطبی از نظر ماهیت مانند نمودار دایره ای یا دوناتی است، با این تفاوت که فراوانی در نمودار دایره ای و دوناتی، شعاع قطاع ها برابر بود و زاویه مرکزی هر قطاع نمایانگر فراوانی نسبی آن داده بود. اما در نمودار قطبی، زاویه مرکزی قطاع ها برابر است و شعاع هر قطاع نشان میدهد که فراوانی آن داده به چه مقدار است. نکته حائز توجه و برتری نمودار قطبی نسبت به دایره ای و دوناتی این است که در نمودار قطبی فراوانی مطلق را نیز میتوان به صورت مستقیم نمایش داده اما در دایره ای و دوناتی تنها میتوان فراوانی نسبی را نمایش داد.
داده های این نوع نمودار، آرایه ای از اعداد است. مثال:
data = {
datasets: [{
data: [10, 20, 30]
}]
}
میتوانیم مقادیر پیشفرض رسم این نوع نمودار را از آدرس
Chart.defaults.polarArea
تغییر دهیم.
بعد از تغییر، نمودار های جدید با مقادیر پیشفرض جدید رسم میشوند، اما نمودار هایی که پیشتر تولید شده اند، بدون تغییر میمانند.
مثال:
Chart.defaults.polarArea.animation.animateScale = false;
برای هر دیتاست، میتوانیم تنظیماتی را در نمودار های قطبی کنترل کنیم، تنظیماتی اعم از نحوه نمایش، الویت رسم و نحوه پاسخگویی به وقایع (event). در جداول زیر این موارد را نام میبریم. توجه کنید که این تنظیمات میتوانند به صورت جداگانه برای هر Dataset انجام شود.
نام فیلد | نوع | اسکیریپ پذیر | ایندکس پذیر | مقدار پیشفرض |
---|---|---|---|---|
backgroundColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
borderAlign | string | بله | بله | center |
borderColor | Color | بله | بله | '#fff' |
borderWidth | number | بله | بله | 2 |
data | number[] | خیر | خیر | required |
hoverBackgroundColor | Color | بله | بله | undefined |
hoverBorderColor | Color | بله | بله | undefined |
hoverBorderWidth | number | بله | بله | undefined |
توضیحات مربوط به موارد فوق را میتوانید در جدوال زیر مشاهده کنید.
نام فیلد | توضیحات |
---|---|
backgroundColor | رنگ زمینه قطاع. |
borderColor | رنگ مرز قطاع. |
borderWidth | ضخامت مرز قطاع بر مبنای px. |
نام فیلد | توضیحات |
---|---|
hoverBackgroundColor | رنگ زمینه قطاع هنگامی که نشانگر بر روی آن است. |
hoverBorderColor | رنگ مرز قطاع هنگامی که نشانگر بر روی آن است |
hoverBorderWidth | ضخامت مرز قطاع هنگامی که نشانگر بر روی آن است بر مبنای px. |
از موارد فوق میتوان به عنوان option استفاده کرد تا نمودار مطلوب را بدست آورد.
نام | نوع | مقدار پیشفرض | توضیحات |
---|---|---|---|
startAngle | number | -0.5 * Math.PI | زاویه شروع رسم اولین قطاع |
animation.animateRotate | boolean | TRUE | در صورت درست بودن نمودار با انیمیشن دورانی نمایش داده میشود. |
animation.animateScale | boolean | TRUE | در صورت درست بودن، نمودار با انیمیشین از مرکز بزرگ میشود. |
دو مقدار مجاز برای borderAlign وجود دارد:
center
inner
در صورتی که گزینه center انتخاب شود، مرز قطاع های همجوار با یک دیگر همپوشانی خواهد داشت اما در صورتی که گزینه inner انتخاب شود، تضمین میشود که مرز ها با یک دیگر همپوشانی نخواهند داشت. توجه کنید که مقدار پیشفرض این تنظیم، center است.
type: 'bubble'
این نوع نمودار به آرایه ای از نقاط به عنوان داده نیاز دارد. هر نقطه باید یک ابجکت شامل مختصه طولی و عرضی و شعاع هر حباب باشد.
{
x: number,
y: number,
r: number
}
توجه کنید که مقدار شعاع یک مقدار مطلق بر حسب پیکسل است و نسبت به اندازه نمایش نمودار مقیاس بندی نمی شود.
میتوانیم مقادیر پیشفرض رسم این نوع نمودار را از آدرس
Chart.defaults.bubble
تغییر دهیم.
بعد از تغییر، نمودار های جدید با مقادیر پیشفرض جدید رسم میشوند، اما نمودار هایی که پیشتر تولید شده اند، بدون تغییر میمانند.
برای هر دیتاست، میتوانیم تنظیماتی را در نمودار های حبابی کنترل کنیم، تنظیماتی اعم از نحوه نمایش، الویت رسم و نحوه پاسخگویی به وقایع (event). در جداول زیر این موارد را نام میبریم. توجه کنید که این تنظیمات میتوانند به صورت جداگانه برای هر Dataset انجام شود.
نام فیلد | نوع فیلد | اسکیریپ پذیر | ایندکس پذیر | مقدار پیشفرض |
---|---|---|---|---|
backgroundColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
borderColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
borderWidth | number | بله | بله | 3 |
data | object[] | خیر | خیر | required |
hoverBackgroundColor | Color | بله | بله | undefined |
hoverBorderColor | Color | بله | بله | undefined |
hoverBorderWidth | number | بله | بله | 1 |
hoverRadius | number | بله | بله | 4 |
hitRadius | number | بله | بله | 1 |
label | string | خیر | خیر | undefined |
order | number | خیر | خیر | 0 |
pointStyle | string | بله | بله | circle |
rotation | number | بله | بله | 0 |
radius | number | بله | بله | 3 |
توضیحات مربوط به موارد فوق را میتوانید در جداول زیر مشاهده کنید.
نام فیلد | توضیحات |
---|---|
label | برچسب (label) دیتاست که در legend و tooltip نمایش داده میشود. |
order | الویت رسم دیتاست. |
نام فیلد | توضیحات |
---|---|
backgroundColor | رنگ زمینه حباب ها. |
borderColor | رنگ مرز حباب ها. |
borderWidth | ضخامت مرز حباب ها بر مبنای px. |
pointStyle | شکل حباب ها. |
rotation | دوران حباب ها (بر مینای درجه). |
radius | شعاع حباب ها. |
نام فیلد | توضیحات |
---|---|
hoverBackgroundColor | رنگ زمینه حباب ها هنگامی که نشانگر بر روی آن است. |
hoverBorderColor | رنگ مرز حباب ها هنگامی که نشانگر بر روی آن است. |
hoverBorderWidth | ضخامت مرز حباب ها هنگامی که نشانگر بر روی آن است. |
hoverRadius | شعاع مازاد حباب ها حباب ها هنگامی که نشانگر بر روی آن است. |
hitRadius | شعاع اضافی حباب ها هنگامی که بر آن ضربه زده میشود. |
type: 'bar'
در نودار ستونی با استفاده از ستون ها، و یا در شرایط خاص سطر ها، فراوانی داده ها را نمایش میدهیم.
داده ها را به سه طریق میتوانیم به این نمودار بدهیم:
می توانیم آرایه ای از اعداد را به این نوع نمودار به عنوان ارتفاع هر ستون بدهیم. هر عدد به ستون label که در ایندکس مشابه در labels قرار دارد، مرتبط خواهد شد. مشابه نمودار خطی
مشابه نمودار خطی، در این مورد نیز میتوانیم آرایه ای از نقاط را به نمودار مورد نظر بدهیم. علی الخصوص زمانی که از محور زمانی استفاده میکنیم. مثال:
data: [{
x: '2016-12-25',
y: 20
}, {
x: '2016-12-26',
y: 25
}]
میتوانیم به جای یک عدد برای هر label در آرایه به عنوان ارتفاع، یک زوج مرتبط را به عنوان نقطه شروع و نقطه پایان به هر label نسبت دهیم:
data: [[0, 2], [1, 3], [2, 4], [1, 3]]
نمودار افقی کاملا مشابه نمودار عمودی عمل می کند. برای افقی کردن نمودار کافی است که type نمودار را عوض کنیم.
Chart.defaults.horizontalBar
میتوانیم مقادیر پیشفرض رسم این نوع نمودار را از آدرس
Chart.defaults.bar
تغییر دهیم.
همچنین توجه کنید که تنظیمات مربوط به نمودار های افقی را می توانیم از آدرس زیر تغییر دهیم. توجه کنید که محور عمودی و افقی در این دو نمودار جایجا هستند.
Chart.defaults.horizontalBar
بعد از تغییر، نمودار های جدید با مقادیر پیشفرض جدید رسم میشوند، اما نمودار هایی که پیشتر تولید شده اند، بدون تغییر میمانند.
برای هر دیتاست، میتوانیم تنظیماتی را در نمودار های ستونی کنترل کنیم، تنظیماتی اعم از نحوه نمایش، الویت رسم و نحوه پاسخگویی به وقایع (event). در جداول زیر این موارد را نام میبریم. توجه کنید که این تنظیمات میتوانند به صورت جداگانه برای هر Dataset انجام شود.
نام فیلد | نوع | اسکیریپ پذیر | ایندکس پذیر | مقدار پیشفرض |
---|---|---|---|---|
backgroundColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
borderColor | Color | بله | بله | rgba(0, 0, 0, 0.1) |
borderSkipped | string | بله | بله | bottom |
borderWidth | number | object | بله | بله |
data | object[] | خیر | خیر | required |
hoverBackgroundColor | Color | خیر | بله | undefined |
hoverBorderColor | Color | خیر | بله | undefined |
hoverBorderWidth | number | خیر | بله | 1 |
label | string | خیر | خیر | empty_string |
order | number | خیر | خیر | 0 |
xAxisID | string | خیر | خیر | first x axis |
yAxisID | string | خیر | خیر | first y axis |
توضیحات بیشتر درباره موارد فوق را میتوانید در جداول زیر مشاهده کنید.
نام فیلد | توضیحات |
---|---|
label | نام دیتاست که در legend و tooltip نمایش داده میشود. |
order | الویت رسم. |
xAxisID | شناسه محور افقی |
yAxisID | شناسه محور عمودی |
نام فیلد | توضیحات |
---|---|
backgroundColor | رنگ زمینه ستون ها |
borderColor | رنگ مرز ستون ها |
borderWidth | ضخامت ستون ها بر مبنای پیکسل |
نام فیلد | توضیحات |
---|---|
hoverBackgroundColor | رنگ زمینه ستون ها زمانی که نشانگر بر روی آن است. |
hoverBorderColor | رنگ مرز ستون ها زمانی که نشانگر بر روی آن است. |
hoverBorderWidth | ضخامت ستون ها بر مبنای پیکسل زمانی که نشانگر بر روی آن است. |
type: 'scatter'
این نوع نمودار بر پایه نمودار خطی (line) پیاده اسازی شده است. بنابریین توضیح مجدد، تکرار مکررات است.
داده ی مطلوب این نمودار، آرابه ای از نقاط است. هر نقطه ایجکتی است که دو مختصه طولی و عرضی را در خود ذخیره میکند.
{
x: number,
y: number
}
توجه کنید که در مواردی میتوانیم انواع نمودار ها را با یک دیگر تلفیق کنیم و یک نمودار تلفیقی به دست آوریم. به عنوان مثال نمودار های ستونی و خطی را میتوانیم با یک دیگر تلفیق کنیم. توجه کنید برای این تلفیق کافی است نمودار را رسم کنیم سپس به هر دیتاست، در صورتی که نمودار مربوط به آن دیتاست متفاوت از اصل نمودار باشد، نوع نمودار را میدهیم.
مثال:
<canvas id="myMixedChart"></canvas>
<script>
var mixedChart = new Chart(document.getElementById("myMixedChart"), {
type: 'bar',
data: {
datasets: [{
label: 'Bar Dataset',
data: [10, 20, 30, 40],
order: 1,
}, {
label: 'Line Dataset',
data: [10, 20, 30, 40],
type: 'line',
order: 2
}],
labels: ['January', 'February', 'March', 'April']
},
options: {}
});
</script>
نمودار های مربوط به امتیاز بندی این دو بزرگوار زمین فوتبال را تحت نمودار راداری و نمودار ستونی رسم کنید.
نمودار راداری<canvas id="myRadarChart"></canvas>
<script>
let ctxRadar = document.getElementById('myRadarChart').getContext('2d');
let confRadar = {
type: 'radar',
data: {
labels: ['PAC', 'SHO', 'PAS', 'DRI', 'DEF', 'PHY'],
datasets: [{
label: "Messi",
data: [85, 92, 91, 95, 38, 65],
fill: true,
backgroundColor: "rgba(255, 99, 132, 0.2)",
borderColor: "rgb(255, 99, 132)",
pointBackgroundColor: "rgb(255, 99, 132)",
pointBorderColor: "#fff",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "rgb(255, 99, 132)"
}, {
label: "Ronaldo",
data: [89, 93, 81, 89, 35, 77],
fill: true,
backgroundColor: "rgba(54, 162, 235, 0.2)",
borderColor: "rgb(54, 162, 235)",
pointBackgroundColor: "rgb(54, 162, 235)",
pointBorderColor: "#fff",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "rgb(54, 162, 235)"
}]
},
options: {}
}
new Chart(ctxRadar, confRadar);
</script>
نمودار ستونی
<canvas id="myBarChart"></canvas>
<script>
let ctxBar = document.getElementById("myBarChart")
let confBar = {
type: "bar",
data: {
labels: ['PAC', 'SHO', 'PAS', 'DRI', 'DEF', 'PHY'],
datasets: [{
label: "Messi",
data: [85, 92, 91, 95, 38, 65],
fill: false,
backgroundColor: "rgba(255, 99, 132, 0.2)",
borderColor: "rgb(255,99,132)",
borderWidth: 1
}, {
label: "Ronaldo",
data: [89, 93, 81, 89, 35, 77],
fill: false,
backgroundColor: "rgba(54, 162, 235, 0.2)",
borderColor: "rgb(54, 162, 235)",
borderWidth: 1
}]
},
options: {"scales": {"yAxes": [{"ticks": {"beginAtZero": true}}]}}
}
new Chart(ctxBar, confBar);
</script>
خروجی کد های فوق برابر خواهد بود با: (مثال مسی و رونالدو)
همان طور که مشاهده می کنید، میتوانیم به یک نمودار چند dataset اضافه کنیم.
جدول زیر تعداد فروش 10 خودروساز پرفروش سال 2019 در ایالات متحده است. نمودار های دایره ای، دوناتی و قطبی این داده ها را رسم کنید. (مثال خودرو)
نام شرکت | میزان فروش |
---|---|
فورد | 2284425 |
تویوتا | 2085206 |
شورولت | 1942039 |
هوندا | 1450985 |
نیسان | 1227973 |
جیپ | 923292 |
رم | 703023 |
سوبارو | 700117 |
هیوندای | 688771 |
کیا | 614613 |
نمودار دایره ای
<canvas id="myPieChart"></canvas>
<script>
let ctxPie = document.getElementById("myPieChart");
let confPie = {
type: "pie",
data: {
labels: ["فورد", "تویوتا", "شورولت", "هوندا", "نیسان", "جیپ", "رم", "سوبارو", "هیوندای", "کیا"],
datasets: [{
label: "Brand",
data: [2284425, 2085206, 1942039, 1450985, 1227973, 923292, 703023, 700117, 688771, 614613],
backgroundColor: ["rgb(20,89,133)", "rgb(226,22,22)", "rgb(205,154,40)", "rgb(91,5,5)",
"rgb(139,210,62)", "rgb(150,36,221)", "rgb(207,90,36)", "rgb(255, 99, 132)",
"rgb(54, 162, 235)", "rgb(255, 205, 86)",]
}]
},
options: {
legend: {
labels: {
fontSize: 20,
fontFamily: "Adobe Arabic"
}
}
}
};
new Chart(ctxPie, confPie);
</script>
نمودار دوناتی
<canvas id="myDoughnutChart"></canvas>
<script>
let ctxDoughnut = document.getElementById("myDoughnutChart");
let confDoughnut = {
type: "doughnut",
data: {
labels: ["فورد", "تویوتا", "شورولت", "هوندا", "نیسان", "جیپ", "رم", "سوبارو", "هیوندای", "کیا"],
datasets: [{
label: "Brand",
data: [2284425, 2085206, 1942039, 1450985, 1227973, 923292, 703023, 700117, 688771, 614613],
backgroundColor: ["rgb(20,89,133)", "rgb(226,22,22)", "rgb(205,154,40)", "rgb(91,5,5)",
"rgb(139,210,62)", "rgb(150,36,221)", "rgb(207,90,36)", "rgb(255, 99, 132)",
"rgb(54, 162, 235)", "rgb(255, 205, 86)",]
}]
},
options: {
legend: {
labels: {
fontSize: 20,
fontFamily: "Adobe Arabic"
}
}
}
};
new Chart(ctxDoughnut, confDoughnut);
</script>
نمودار قطبی
<canvas id="myPolarChart"></canvas>
<script>
let ctxPolar = document.getElementById("myPolarChart");
let confPolar = {
type: "polarArea",
data: {
labels: ["فورد", "تویوتا", "شورولت", "هوندا", "نیسان", "جیپ", "رم", "سوبارو", "هیوندای", "کیا"],
datasets: [{
label: "Brand",
data: [2284425, 2085206, 1942039, 1450985, 1227973, 923292, 703023, 700117, 688771, 614613],
backgroundColor: ["rgb(20,89,133)", "rgb(226,22,22)", "rgb(205,154,40)", "rgb(91,5,5)",
"rgb(139,210,62)", "rgb(150,36,221)", "rgb(207,90,36)", "rgb(255, 99, 132)",
"rgb(54, 162, 235)", "rgb(255, 205, 86)",]
}]
},
options: {
legend: {
labels: {
fontSize: 20,
fontFamily: "Adobe Arabic"
}
}
}
};
new Chart(ctxPolar, confPolar);
</script>
همان طور که مشاهده می کنید، در این مثال font را نیز تغییر دادیم.
ایده مونته کارلو: یک ایده مناسب برای محاسبه انتگرال معین توابع، این است که بازه مورد نظر را یک مسطتیل در نظر بگیریم، سپس در این مستطیل تعداد زیادی نقطه تصادفی به صورت uniform بدست آوریم. احتمال اینکه نقطه مورد نظر زیر نمودار باشد، برابر نسبت مساحت زیر نمودار به مساحت کل مستطیل است. بنابرین اگر تعداد نقاطی که زیر نمودار است را بشماریم و نسبت آن را به تعداد کل نقاط محاسبه کنیم، با ضرب این مقدار در مساحت مستطیل میتوانیم انتگرال مورد نظر را به صورت تقریبی پیدا کنیم.
ماموریت این است که یک نمودار مناسب برای استفاده از این ایده برای محاسبه انتگرال تابع مجذور در بازه 0 تا 4 رسم کنید. دقت کنید در این مثال از Scriptable بودن color استفاده کرده ایم.
<canvas id="chart"></canvas>
<script>
function getRandomizedPoints(xLowerBound, xUpperBound, yLowerBound, yUpperBound, count) {
let points = [];
for (let i = 0; i < count; i++) {
points.push({
x: (Math.random() * (xUpperBound - xLowerBound)) + xLowerBound,
y: (Math.random() * (yUpperBound - yLowerBound)) + yLowerBound
})
}
return points;
}
let ctx = document.getElementById("chart");
let conf = {
type: "scatter",
data: {
datasets: [{
data: getRandomizedPoints(0, 4, 0, 16, 20000),
pointBackgroundColor: function (context) {
let index = context.dataIndex;
let value = context.dataset.data[index];
if (value.y >= value.x ** 2) {
return 'red';
} else {
return 'blue';
}
}
}]
}
}
new Chart(ctx, conf);
</script>
نتیجه
تنظیمات بدین منظور استفاده میشود که نحوه رفتار نمودار را کنترل کند. در این قسمت ابزاری وجود دارد که به کمک آنها میتوان استایل، فونت و ... نمودار را تنظیم کرد.
این ویژگی در نسخه 1.0 معرفی شد و هدف آن این بود که کاربر بتواند به سادگی ویژگیای را در تمام نمودار های موجود تنظیم کند و نیازی به تغییر آن برای هر نمودار نباشد.
این کتابخانه به طور خودکار تنظیمات سراسری را با ویژگی های خواسته شده کاربر تطبیق میدهد و در صورت نیاز نیز میتوان هر نمودار را به صورت جدا گانه تنظیم کرد.
قطعه کد زیر نحوه hover را برای تمامی نمودارهایی که به طور جداگانه تنظیم نشدهاند را روی nearest تنظیم میکند.
Chart.defaults.global.hover.mode = 'nearest';
// Hover mode is set to nearest because it was not overridden here
var chartHoverModeNearest = new Chart(ctx, {
type: 'line',
data: data
});
// This chart would have the hover mode that was passed in
var chartDifferentHoverMode = new Chart(ctx, {
type: 'line',
data: data,
options: {
hover: {
// Overrides the global setting
mode: 'index'
}
}
});
لایبرری Chart.Js به طور پیشفرق نمودار ها را انیمیت میکند. تعدادی ابزار در این کتابخانه فراهم شده تا ظاهر، طول و نحوه نمایش این نمودار ها قایل شخصی سازی باشد.
موارد قید شده در جدول زیر از امکانات انیمیشنها در این متابخانه است.
نام | نوع | پیشفرض | توضیحات |
---|---|---|---|
duration | number | 1000 | The number of milliseconds an animation takes. |
easing | string | 'easeOutQuart' | Easing function to use. more... |
onProgress | function | null | Callback called on each step of an animation. more... |
onComplete | function | null | Callback called at the end of an animation. more... |
موارد قابل دسترس عبارتند از :
- 'linear'
- 'easeInQuad'
- 'easeOutQuad'
- 'easeInOutQuad'
- 'easeInCubic'
- 'easeOutCubic'
- 'easeInOutCubic'
- 'easeInQuart'
- 'easeOutQuart'
- 'easeInOutQuart'
- 'easeInQuint'
- 'easeOutQuint'
- 'easeInOutQuint'
- 'easeInSine'
- 'easeOutSine'
- 'easeInOutSine'
- 'easeInExpo'
- 'easeOutExpo'
- 'easeInOutExpo'
- 'easeInCirc'
- 'easeOutCirc'
- 'easeInOutCirc'
- 'easeInElastic'
- 'easeOutElastic'
- 'easeInOutElastic'
- 'easeInBack'
- 'easeOutBack'
- 'easeInOutBack'
- 'easeInBounce'
- 'easeOutBounce'
- 'easeInOutBounce'
کالبک های onComplete
و onProgress
برای هماهنگ کردن یک حط خارج از نمودار بسیار مناسباند. این کالبک ها به نمونه chart.Animation
پاس داده میشود.
{
// Chart object
chart: Chart,
// Current Animation frame number
currentStep: number,
// Number of animation frames
numSteps: number,
// Animation easing to use
easing: string,
// Function that renders the chart
render: function,
// User callback
onAnimationProgress: function,
// User callback
onAnimationComplete: function
}
تنظیمات چیدمان به نیماسپیس options.layout پاس داده میشود. تنظیمات پیشفرض این قسمت در Chart.defaults.global.layout قرار داده شده است.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
padding | number/object | 0 | فاصله درونی از container |
اگر مقدار یک عدد باشد نتیجه بر هر چهار طرف نمودار اعمال میشود. اگر مقدار یک شی باشد هر کدام از موارد left, right, top, bottom به ترتیب حاشیه از چپ، راست، بالا و پایین رو مشخص میکنند.
let chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
layout: {
padding: {
left: 50,
right: 0,
top: 0,
bottom: 0
}
}
}
});
این بخش اطلاعاتی در باره دیتاست های نشان داده شده در نمودار ها به ما میدهد.
تنظیمات حاشیهنویسی به نیماسپیس options.legend پاس داده میشود. تنظیمات پیشفرض آن نیز در Chart.defaults.global.legend قرار داده شده است.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
display | boolean | TRUE | آیا حاشیهنویسی قابل رویت است؟ |
position | string | 'top' | موقعیت حاشیهنویسی |
align | string | 'center' | جینش حاشیهنویسی |
fullWidth | boolean | TRUE | تمامصفحه شدن نمودار |
onClick | function | کالبکی که در هنگام کلیک بر روی لیبل فراخوانده میشود | |
onHover | function | کالبکی که در هنگام عبور از روی لیبل فراخوانده میشود | |
onLeave | function | کالبکی که در هنگام خروج موس از روی لیبل فراخوانده میشود | |
reverse | boolean | FALSE | حاشیه نویسی در ترتیب معکوس نمایش داده میشود. |
labels | object | در قسمت های زیرین کامل توضیح داده شده است. | |
rtl | boolean | در صورت فعال بودن راستچین میشود. | |
textDirection | string | canvas' default | جهت نوشتار را به اجبار راستچین میکند. |
مکان های حاشیهنویسی عبارتاند از:
- 'top'
- 'left'
- 'bottom'
- 'right'
چینشهای موجود برای این بخش عبارتند از :
- 'start'
- 'center'
- 'end'
با استفاده از کلید label که در زیر مجموعه حاشیهنویسی قرار گرفته میتوانیم مقادیر آن را کنترل کنیم.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
boxWidth | number | 40 | عرض جعبه |
fontSize | number | 12 | سایز فونت |
fontStyle | string | 'normal' | استایل فونت |
fontColor | Color | '#666' | رنگ فونت |
fontFamily | string | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | نام فونت |
padding | number | 10 | حاشیهدرونی جعبه |
generateLabels | function | برای هر حاشیهنویسی یک برچسب تشکیل میدهد. | |
filter | function | null | حاشیه نویسی ها را فیلتر میکند. |
تنظیمات عنوان گذاری به نیماسپیس options.title پاس داده میشود. تنظیمات سراسری آن نیز در Chart.defaults.global.title واقع شده است.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
display | boolean | FALSE | آیا عنوان نمیان است؟ |
position | string | 'top' | موقعیت عنوان |
fontSize | number | 12 | سایز فونت عنوان |
fontFamily | string | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | نام فونت عنوان |
fontColor | Color | '#666' | رنگ فونت |
fontStyle | string | 'bold' | استایل فونت |
padding | number | 10 | حاشیه درونی |
lineHeight | number/string | 1.2 | ارتفاع یک خط |
text | string/string[] | '' | متنی که نمایش داده میشود. |
مکان های ممکن برای عنوان عبارتاند از:
- 'top'
- 'left'
- 'bottom'
- 'right'
تکه کد زیر عنوان 'Custom Chart Title' را برای عنوان نمودار نشان میدهد.
var chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
title: {
display: true,
text: 'Custom Chart Title'
}
}
});
هر چند انواع نمودار امکان انتخاب استایل هر دیتاست را به ما میدهد اما گاهی اوضات نیاز داریم که تمام دیتاست ها را به یک شکل تنظیم کنیم. این امکانات میتوانند برای 4 نوع المان کمان، خط، نقطه و مستطیل فراهم شوند و هنگامی که دچار تغییر شوند تغییرات حاصل بر تمام شیهای آن نوع المان تاثیر میگذارد مگر آنکه به طور خاص override شده باشد.
تنظیمات سراسری برای المان ها در Chart.defaults.global.elements قرار داده شده است. برای مثال اگر بخواهیم یک border برای همه نمودار ها فراهم کنیم داریم:
Chart.defaults.global.elements.rectangle.borderWidth = 2;
امکانات سراسری موجود برای این ویژگی که در Chart.defaults.global.elements.point وجود دارد عبارتند از:
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
radius | number | 3 | شعاع نقطه |
pointStyle | string | Image | 'circle' |
rotation | number | 0 | چرخش نقطه |
backgroundColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ درونی نقطه |
borderWidth | number | 1 | ضخامت خط دور نقطه |
borderColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ خط دور نقطه |
hitRadius | number | 1 | شعاع نقطه پس از فشرده شدن |
hoverRadius | number | 4 | شعاع نقطه هنگام عبور از آن |
hoverBorderWidth | number | 1 | ضخامت خط دور نقطه هنگام عبور از آن |
مقادیر زیر پشتیبانی میشود :
- 'circle'
- 'cross'
- 'crossRot'
- 'dash'
- 'line'
- 'rect'
- 'rectRounded'
- 'rectRot'
- 'star'
- 'triangle'
خط ها در رسم نمودار ها استفاده میشوند. امکانات تنظیم آنها در Chart.defaults.global.elements.line فراهم شده.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
tension | number | 0.4 | منحنی بزیور |
backgroundColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ داخلی خط |
borderWidth | number | 3 | ضخامت خط حاشیهای خط |
borderColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ خط حاشیهای خط |
borderCapStyle | string | 'butt' | استایل cap خط |
borderDash | number[] | [] | حاشیه خطچین |
borderDashOffset | number | 0 | میزان Offset خط |
borderJoinStyle | string | 'miter' | نحوه پیوستن خطها |
fill | boolean | string | TRUE |
stepped | boolean | FALSE | در صورت فعال بودن خط به سورت پلهای کشیده میشود. |
fill | boolean | string | TRUE |
stepped | boolean | FALSE | در صورت فعال بودن خط به سورت پلهای کشیده میشود. |
المان های مستطیل برای نشاندادن نوارها استفاده میشود. تنظیمات رائه شده برای آن در در قسمت Chart.defaults.global.elements.rectangle قرار دارد.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
backgroundColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ درونی نوار |
borderWidth | number | 0 | ضخامت خط بیرونی نوار |
borderColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ خط بیرونی نوار |
borderSkipped | string | 'bottom' | در صورت انتخاب هر طرف خط دوری آن قسمت skip میشود. |
کمان ها در نمودار های قطبی، دوناتی و کیکی دیده میشود. امکانات تنظیمات این بخش در قسمت Chart.defaults.global.elements.arc جای داده شدهاست.
نام | نوع | حالت پیشفرض | توضیحات |
---|---|---|---|
angle - for polar only | number | circumference / (arc count) | زاویه تحت پویشش |
backgroundColor | Color | 'rgba(0, 0, 0, 0.1)' | رنگ درونی کمان |
borderAlign | string | 'center' | چینش خط بیرونی کمان |
borderColor | Color | '#fff' | رنگ خط بیرونی کمان |
borderWidth | number | 2 | ضخامت خط بیرونی کمان |
یرای اطلاعات بیشتر پروژه ای جنگو در این بخش قرار میدهم که با دریافت اطلاعات از API بازار بورس نمودار های مورد نیاز برای تحلیل سهام به ما میدهد لینک پروژه