Live examples of chart.js with Ionic 5
We are going to learn how to add chart in the ionic 5 application with the chart.js library.
The chart.js library is very easy to use, it just uses the canvas to draw the chart. So, we need a canvas and chart.js library installed to render a chart.
Might be interested in angular material design with ionic 5.
Live Demo
Install chart.js library to ionic 5 project
I assume you already have an ionic project that’s why you are looking for a chart and graph integrations.
So, the first thing is to install the chart.js library via npm to your existing project.
npm install chart.js
Example of charts and graphs with ionic 5
Simply import the chart to your page where you want to render a chart.
In our case it is home.page.ts and import chart like below
import Chart from 'chart.js/auto';
We just need a canvas element in our html page like below.
<ion-header>
<ion-toolbar color="danger">
<ion-title>
Example of Chart.js
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content class="bg-gray">
<ion-list class="cus-card">
<ion-list-header>
<ion-label>
Select Chart type
</ion-label>
</ion-list-header>
<ion-item class="ion-padding-horizontal" lines="none">
<ion-label> Charts </ion-label>
<ion-select value="bar" okText="Create" cancelText="Cancel" mode="ios" (ionChange)="changeChart($event)" color="danger">
<ion-select-option value="bar">Bar</ion-select-option>
<ion-select-option value="line">Lines</ion-select-option>
<ion-select-option value="radar">Radar</ion-select-option>
<ion-select-option value="doughnut">Doughnut</ion-select-option>
<ion-select-option value="pie">Pie</ion-select-option>
</ion-select>
</ion-item>
</ion-list>
<div class="bg-white cus-card">
<canvas #chartCanvas></canvas>
</div>
<div class="cus-card bg-white ion-padding">
<p>Design & Developed by <a href="https://sbsharma.com/" target="_blank">sbsharma.com</a> </p>
</div>
</ion-content>
Now, we can easily render the chart with our ionic 5 project using the following methods.
import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import Chart from 'chart.js/auto';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage implements AfterViewInit, OnInit {
@ViewChild('chartCanvas') chartCanvas : ElementRef;
data : any = [];
canvasChart : Chart;
constructor(
) {}
ngOnInit() {
}
async ngAfterViewInit() {
let stocks = await fetch("assets/data/stocks.json").then(resp => resp.json());
stocks = stocks[0];
let opens = [];
let closes = [];
let highs = [];
let lows = [];
let volumes = [];
let labels = [];
Object.keys(stocks).forEach((key, index, array) => {
if (index > 2) {
return true;
}
labels.push(key);
opens.push( this.addRandom(stocks[key].open) );
closes.push( this.addRandom(stocks[key].close) );
highs.push( this.addRandom(stocks[key].high) );
lows.push( this.addRandom(stocks[key].low) );
volumes.push(stocks[key].volume);
});
this.data = {
labels: labels,
datasets: [{
label: 'Open',
data: opens,
backgroundColor: 'rgba(255, 199, 132, 0.2)',
borderColor: 'rgba(255, 99, 32, 0.8)',
borderWidth: 2
},{
label: 'High',
data: highs,
backgroundColor: 'rgba(55, 99, 132, 0.4)',
borderColor: 'rgba(55, 99, 132, 0.8)',
borderWidth: 2
}, {
label: 'Low',
data: lows,
backgroundColor: 'rgba(155, 99, 132, 0.4)',
borderColor: 'rgba(155, 99, 132, 0.8)',
borderWidth: 2
}, {
label: 'Close',
data: closes,
backgroundColor: 'rgba(55, 99, 232, 0.4)',
borderColor: 'rgba(55, 99, 132, 0.8)',
borderWidth: 2
}]
};
this.changeChart({detail: {
value : 'bar'
}});
}
changeChart( event: any ) {
const type = event.detail.value || 'bar';
if ( this.canvasChart ) {
this.canvasChart.destroy();
}
this.canvasChart = new Chart(this.chartCanvas.nativeElement, {
type: type,
data: this.data,
options: {
indexAxis: 'x'
}
});
}
addRandom( points: any ) : number {
return Number(points) - Number( Math.floor((Math.random() * 100) + 1) );
}
}
We have tried to do some fun with it, so you can see a select box or menu in the above demo screen. You can try different kinds of charts there.
Hope you enjoy the tutorial.
See you in the next article.
