I have a line-chart
and I want to zoom it but unable to do it. Here is my code
let ctx = document.getElementById('myChart')
let chart = new Chart(ctx, {
type: 'line',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [7, 10, 3, 5, 2, 3],
fill: true,
backgroundColor: 'orange',
borderColor: 'green',
pointBorderColor: 'red',
pointBackgroundColor: 'red'
}]
},
options: {
plugins: {
pan: {
enabled: true,
mode: 'x',
onPan: function () { console.log('I was panned!!!'); }
},
zoom: {
enabled: true,
drag: true,
mode: 'x',
onZoom: function () { console.log('I was zoomed!!!'); }
},
},
responsive: true,
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>
<div class="row">
<div class="col d-flex justify-content-center">
<canvas id="myChart" style="max-width:95%;height:300px !important;"></canvas>
</div>
</div>
I have used the following plugin
for zooming
https://github.com/chartjs/chartjs-plugin-zoom#readme
I have also included hammerjs
and angular/animations
in my project.
Update
Why pan
and zoom
are unknown to typescript?
// package.json
"chart.js": "^2.7.3",
"chartjs-plugin-zoom": "^0.6.6",
By default, you can draw a view box or use the mouse wheel to zoom in or out. Double click to fit the chart in the canvas.
The charts are animated and responsive so we can show it on any device. If you want to combine Chart. js with Angular then we can use: ng2-chart. Adding this package gives you access to angular instructions so that you can use the Chart.
Let's get started using Chart.js! First, we need to have a canvas in our page. It's recommended to give the chart its own container for responsiveness.
TypeScript Typings Chart. js provides a way to augment built-in types with user-defined ones, by using the concept of "declaration merging".
First you need to Run npm install chartjs-plugin-zoom
to install with npm
then do import chartjs-plugin-zoom
in your .ts file and write plugin like this :
plugins: {
zoom: {
pan: {
enabled: true,
mode: 'x'
},
zoom: {
enabled: true,
mode: 'x'
}
}
},
The zoom options should be configured under the options
not options.plugins
setting.
options: {
pan: {
enabled: true,
mode: 'x',
},
zoom: {
enabled: true,
mode: 'x',
},
responsive: true
}
See this fiddle -> http://jsfiddle.net/3sx8zon2/2/
Install chart.js and chartjs-plugin-zoom
npm i chart.js -s
npm i chartjs-plugin-zoom -s
In Component.ts file import Chart and chartjs-plugin-zoom
import { Chart } from 'chart.js';
import 'chartjs-plugin-zoom';
Logic to load chart
let myChart = new Chart('mapId', {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
},
plugins: {
zoom: {
pan: {
enabled: true,
mode: 'xy'
},
zoom: {
enabled: true,
mode: 'xy'
}
}
}
}
});
myChart.render();
In Component.html
<canvas id="mapId"></canvas>
I had used and work fine (Angular 12 - Chartjs 3.5.0):
1.
npm i chart.js -s
npm i chartjs-plugin-zoom -s
.2
import 'hammerjs';
import zoomPlugin from 'chartjs-plugin-zoom';
Chart.register(zoomPlugin);
render: Chart;
this.render = new Chart(ctx, {type: 'line',
data: {
labels: xxxxxxxx,
datasets: [
......
]
},
options: {
responsive: true,
interaction: {
mode: 'index',
intersect: false,
},
plugins: {
zoom: {
zoom: {
wheel: {
enabled: true,
},
pinch: {
enabled: true
},
mode: 'xy',
},
pan: {
enabled: true,
mode: 'xy',
},
}
}
},
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With