Chart.js: Dynamic Changing of Chart Type (Line to Bar as Example)

后端 未结 3 1421
独厮守ぢ
独厮守ぢ 2020-12-17 19:53

I am trying to hot swap chart types based on select box changes. If data needs to be updated, it changes.

So for example, on page load I create a chart like this:

相关标签:
3条回答
  • 2020-12-17 20:06

    The alternate solution can be as simple as creating both the charts in separate Div elements. Then as per your condition just make one visible and hide other in the javascript. This should serve the purpose you may have for changing the chart type for your requirement.

    0 讨论(0)
  • 2020-12-17 20:17

    Just to follow up that this is now fixed in v.2.1.3, as followed through by https://stackoverflow.com/users/239375/nathan

    document.getElementById('changeToLine').onclick = function() {
      myChart.destroy();
      myChart = new Chart(ctx, {
        type: 'line',
        data: chartData
      });
    };
    

    Confirmed fixed in latest version. Check out http://codepen.io/anon/pen/ezJGPB and press the button under the chart to change it from a bar to a line chart.

    0 讨论(0)
  • 2020-12-17 20:20

    The Fix

    • Destroy the old chart (to remove event listeners and clear the canvas)
    • Make a deep copy of the config object
    • Change the type of the copy
    • Pass the copy instead of the original object.

    Here is a working jsfiddle example

    Example Overview:

    var temp = jQuery.extend(true, {}, config);
    temp.type = 'bar'; // The new chart type
    myChart = new Chart(ctx, temp);
    

    NOTE: Using version 2.0.1 of Chart.js

    Why this works

    Chart.js modifies the config object you pass in. Because of that you can not just change 'config.type'. You could go into the modified object and change everything to the type you want, but it is much easier to just save the original config object.

    0 讨论(0)
提交回复
热议问题