由於Angular 本身並沒有提供圖表的模組,所以今天我們要使用第三方的函式庫來建立圖表。
我們今天會用到的兩個套件:ng2-charts
和 chart.js
。chart.js
本身是提供多種圖表製作函式的 library。chart.js
的用法可以在這邊查詢。
那 ng2-charts
呢,可以幫助我們很方便的用 Directive
,給圖表參數與資料。原先我們要先取得一個 canvas
的 DOM 物件,再將圖表餵進去。使用 ng2-charts
,就可以用 Binding,將資料跟 Html 分離。ng2-charts
也有一些範例可以參考。
在專案底下輸入這行指令,安裝 ng2-charts
和 chart.js
npm install ng2-charts chart.js --save
然後我們要在 angular.json
的 script
欄位加入 Chart.js
的檔案路徑。如果有 error 的話,就到 node_modules
底下去找正確的檔案名:
"scripts": [
"./node_modules/chart.js/dist/Chart.min.js"
]
在 AppModule
裡 import ChartsModule
:
// app.module.ts
import { ChartsModule } from 'ng2-charts';
imports: [
...
ChartsModule
]
到這邊已經完成全部的準備工作了,然後我們準備圖表的資料:
barChartLabels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
barChartData = [
{data: [65, 59, 80, 81, 56, 55, 40], label: 'Series A'},
{data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B'}
];
barChartLabels
是一個陣列,放入顯示在 X 軸的資料。
barChartData
也是一個陣列,放 Y 軸的資料。一組資料包含一個 data
陣列,和 label
欄位,表示這組 data
的名字。
barChartOptions = {
responsive: true
};
barChartType = 'bar';
barChartLegend = true;
barChartOptions
裡的 responsive
是指圖表要不要隨裝置縮放。那還有很多選項可以在這邊設定。
barChartType
是圖表的類型,可以是 line
、 bar
等等,代表柱狀圖、折線圖或其他圖表。
barChartLegend
是選擇要不要顯示 Legend
,就是圖表上方的這個東西:
最後,把這些設定好的資料,透過 binding 傳給 html 的 canvas:
// charts.component.ts
barChartOptions = {
responsive: true
};
barChartType = 'bar';
barChartLegend = true;
barChartLabels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
barChartData = [
{data: [65, 59, 80, 81, 56, 55, 400], label: 'Series A'},
{data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B'}
];
// charts.component.html
<div style="display: block;width: 80%;">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
就可以很容易實現圖表呈現了:
參考 : https://medium.com/codingthesmartway-com-blog/angular-chart-js-with-ng2-charts-e21c8262777f