102 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Updating Charts
 | 
						|
 | 
						|
It's pretty common to want to update charts after they've been created. When the chart data or options are changed, Chart.js will animate to the new data values and options.
 | 
						|
 | 
						|
## Adding or Removing Data
 | 
						|
 | 
						|
Adding and removing data is supported by changing the data array. To add data, just add data into the data array as seen in this example.
 | 
						|
 | 
						|
```javascript
 | 
						|
function addData(chart, label, data) {
 | 
						|
    chart.data.labels.push(label);
 | 
						|
    chart.data.datasets.forEach((dataset) => {
 | 
						|
        dataset.data.push(data);
 | 
						|
    });
 | 
						|
    chart.update();
 | 
						|
}
 | 
						|
 | 
						|
function removeData(chart) {
 | 
						|
    chart.data.labels.pop();
 | 
						|
    chart.data.datasets.forEach((dataset) => {
 | 
						|
        dataset.data.pop();
 | 
						|
    });
 | 
						|
    chart.update();
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## Updating Options
 | 
						|
 | 
						|
To update the options, mutating the options property in place or passing in a new options object are supported.
 | 
						|
 | 
						|
- If the options are mutated in place, other option properties would be preserved, including those calculated by Chart.js.
 | 
						|
- If created as a new object, it would be like creating a new chart with the options - old options would be discarded.
 | 
						|
 | 
						|
```javascript
 | 
						|
function updateConfigByMutating(chart) {
 | 
						|
    chart.options.title.text = 'new title';
 | 
						|
    chart.update();
 | 
						|
}
 | 
						|
 | 
						|
function updateConfigAsNewObject(chart) {
 | 
						|
    chart.options = {
 | 
						|
        responsive: true,
 | 
						|
        title: {
 | 
						|
            display: true,
 | 
						|
            text: 'Chart.js'
 | 
						|
        },
 | 
						|
        scales: {
 | 
						|
            xAxes: [{
 | 
						|
                display: true
 | 
						|
            }],
 | 
						|
            yAxes: [{
 | 
						|
                display: true
 | 
						|
            }]
 | 
						|
        }
 | 
						|
    };
 | 
						|
    chart.update();
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Scales can be updated separately without changing other options.
 | 
						|
To update the scales, pass in an object containing all the customization including those unchanged ones.
 | 
						|
 | 
						|
Variables referencing any one from `chart.scales` would be lost after updating scales with a new `id` or the changed `type`.
 | 
						|
 | 
						|
```javascript
 | 
						|
function updateScales(chart) {
 | 
						|
    var xScale = chart.scales['x-axis-0'];
 | 
						|
    var yScale = chart.scales['y-axis-0'];
 | 
						|
    chart.options.scales = {
 | 
						|
        xAxes: [{
 | 
						|
            id: 'newId',
 | 
						|
            display: true
 | 
						|
        }],
 | 
						|
        yAxes: [{
 | 
						|
            display: true,
 | 
						|
            type: 'logarithmic'
 | 
						|
        }]
 | 
						|
    };
 | 
						|
    chart.update();
 | 
						|
    // need to update the reference
 | 
						|
    xScale = chart.scales['newId'];
 | 
						|
    yScale = chart.scales['y-axis-0'];
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
You can also update a specific scale either by specifying its index or id.
 | 
						|
 | 
						|
```javascript
 | 
						|
function updateScale(chart) {
 | 
						|
    chart.options.scales.yAxes[0] = {
 | 
						|
        type: 'logarithmic'
 | 
						|
    };
 | 
						|
    chart.update();
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Code sample for updating options can be found in [toggle-scale-type.html](../../samples/scales/toggle-scale-type.html).
 | 
						|
 | 
						|
## Preventing Animations
 | 
						|
 | 
						|
Sometimes when a chart updates, you may not want an animation. To achieve this you can call `update` with a duration of `0`. This will render the chart synchronously and without an animation.
 |