Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to zoom charts in chart.js using angular 7

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",

enter image description here

like image 378
WasiF Avatar asked Jan 14 '19 07:01

WasiF


People also ask

Can you zoom in chart JS?

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.

Is Chart JS compatible with angular?

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.

Does chart js use canvas?

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.

Does chart JS work with TypeScript?

TypeScript Typings Chart. js provides a way to augment built-in types with user-defined ones, by using the concept of "declaration merging".


4 Answers

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'
        }
      }
    },  
like image 132
Naima Sahih Avatar answered Oct 09 '22 22:10

Naima Sahih


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/

like image 42
Kunal Khivensara Avatar answered Oct 09 '22 23:10

Kunal Khivensara


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>
like image 42
Vinodh Ram Avatar answered Oct 09 '22 22:10

Vinodh Ram


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',
        },
      }
    }
  },

}

like image 23
Thức Trần Avatar answered Oct 09 '22 22:10

Thức Trần