【问题标题】:Switch chart.js data with button click通过单击按钮切换 chart.js 数据
【发布时间】:2017-09-23 20:51:34
【问题描述】:

我正在尝试使用 chart.js 构建动态图表,但我无法弄清楚单击按钮时如何交换数据集。 这里的一些答案建议在版本 2 中使用 update() 和 destroy() 但它们对我不起作用。我可以销毁数据,但不能使用正确的数据集绘制新图表。这是jsfiddle 和下面的代码:

HTML:

<canvas id="forecast" width="300" height="150"></canvas>
<button id="0" type="button" >Dataset 1</button>
<button id="1" type="button" >Dataset 2</button>

JavaScript:

var chart_labels = ['06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
var temp_dataset = ['1', '8', '10', '10', '9', '7'];
var rain_dataset = ['0', '0', '6', '32', '7', '2'];

var ctx = document.getElementById("forecast").getContext('2d');

var config = {
    type: 'bar',
  data: {
    labels: chart_labels,
    datasets: [
      {
        type: 'line',
        label: "Temperature (Celsius)",
        yAxisID: "y-axis-0",
        fill: false,
        data: temp_dataset,
      },
      {
        type: 'bar',
        label: "Precipitation (%)",
        yAxisID: "y-axis-1",
        data: rain_dataset,
      }]
  },
  options: {
    scales: {
      yAxes: [{
        position: "left",
        "id": "y-axis-0",
      }, {
        position: "right",
        "id": "y-axis-1",
      }]
    }
  }
};

var forecast_chart = new Chart(ctx, config);

$("#1").click(function (){
  var chart_labels = ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
  var temp_dataset = ['5', '3', '4', '8', '10', '11', '10', '9'];
  var rain_dataset = ['0', '0', '1', '4', '19', '19', '7', '2'];
  forecast_chart.destroy();
  forecast_chart = new Chart(ctx, config);
});

edit* 我应该补充一点,初始值应该与页面一起加载,button2 click 上的第二个值和 button1 click 上的原始值

【问题讨论】:

    标签: javascript jquery chart.js


    【解决方案1】:

    这可以通过在按钮单击时替换 datalabels 数组来实现...

    $("#0").click(function() {
        var data = forecast_chart.config.data;
        data.datasets[0].data = temp_dataset;
        data.datasets[1].data = rain_dataset;
        data.labels = chart_labels;
        forecast_chart.update();
    });
    
    $("#1").click(function() {
        var chart_labels = ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
        var temp_dataset = ['5', '3', '4', '8', '10', '11', '10', '9'];
        var rain_dataset = ['0', '0', '1', '4', '19', '19', '7', '2'];
    
        var data = forecast_chart.config.data;
        data.datasets[0].data = temp_dataset;
        data.datasets[1].data = rain_dataset;
        data.labels = chart_labels;
        forecast_chart.update();
    });
    

    这是working fiddle

    【讨论】:

    • 嗨@GRUNT 你能帮我解决我的线程stackoverflow.com/questions/57479353/… 中的类似问题吗?
    • @GRUNT: 对于这种情况,是否可以从两个不同的 csv 文件中读取数据,可能正在使用 d3.csv 函数?
    猜你喜欢
    • 2012-12-19
    • 2018-09-17
    • 2011-05-11
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多