简体   繁体   English

下载或导出Chart.js数据到CSV

[英]Download or Export Chart.js data to CSV

I have API data from https://gmlews.com/api/data .我有来自https://gmlews.com/api/data的 API 数据。 And I plot the data for accelero_x on the chart.js like this:我 plot chart.js 上的 accelero_x 数据如下所示:

$(document).ready(function(){
$.datepicker.setDefaults({
    dateFormat: 'yy-mm-dd'
  });
  $("#firstdatepicker").datepicker();
  $("#lastdatepicker").datepicker();
  $("#filter").click(function() {
    var from_date = $("#firstdatepicker").val();
    var to_date = $("#lastdatepicker").val();
    if (from_date != '' && to_date != '') {
      console.log(from_date, to_date);
      var endpoint = '/api/data';

  $.ajax({
    method: "GET",
    url: endpoint,
    data: {
      from_date: from_date,
      to_date: to_date
    },
    success: function(data){
      console.log(data); //get all data
      //get data by fields
      var accelero_x = [], time = [];
      for (var i=0; i<data.length; i++){
        accelero_x.push(data[i].accelero_x);
        time.push(data[i].timestamp);
     }
      console.log(accelero_x);
      console.log(time);
    //plot the chart

      var ctx = document.getElementById("acceleroxChart").getContext('2d');
      var acceleroxChart = new Chart(ctx, {
          type: 'line',
          data: {
              labels: time,
              datasets: [{
                  label: 'Accelero-x (mV/g)',
                  data: accelero_x,
                  fill: false,
                  borderColor: "#80b6f4",
                pointBorderColor: "#80b6f4",
                pointBackgroundColor: "#80b6f4",
                pointHoverBackgroundColor: "#80b6f4",
                pointHoverBorderColor: "#80b6f4",
                pointBorderWidth: 10,
                pointHoverRadius: 10,
                pointHoverBorderWidth: 1,
                pointRadius: 1,
                borderWidth: 4,
              }]
          },
          options: {
              reponsive: true,
              scales: {
                  yAxes: [{
                      ticks: {
                          beginAtZero:false,
                          stepSize:0.5
                      },
                        scaleLabel: {
                        display:     true,
                        labelString: 'Accelero sb.x (mV/g)'
                    }
                  }],
                  xAxes: [{

                          display: true,
                          type: "time",
                          time: {
                                minUnit: "hour",
                                unit: "hour",
                                unitStepSize: 6,
                                min: moment(from_date).toDate(),//Date object type
                                max: moment(to_date).toDate()//Date object type
                          },
                        scaleLabel: {
                        display:     true,
                        labelString: 'Time'
                    }
                  }]
              }
          }
      });
    },
    error: function(error_data){
      console.log(error_data)
    }
  });
} else {
  alert("Please Select Date");
}
  });    
});

The problem is how can I download/export data from the graph to CSV?问题是如何从图中下载/导出数据到 CSV? The data that will appear on CSV are datetime and the value of accelero_x, I am a newbie programmer. CSV上会出现的数据是datetime和accelero_x的值,我是新手程序员。 I hope anyone can help me with the code.我希望任何人都可以帮助我处理代码。

It looks like this link does what you're looking for, just with canvasjs.看起来这个链接可以满足您的需求,只需使用 canvasjs。 I adapted it here for ChartJS:我在这里为 ChartJS 改编了它:

Here's the relevant code:这是相关代码:

 const dataLabels = ['Jan', 'Feb', 'March', 'April', 'May', 'June', 'July']; const data = { labels: dataLabels, datasets: [{ label: 'Dataset 1', data: [65, 59, 80, 81, 56, 55, 40], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(255, 159, 64, 0.2)', 'rgba(255, 205, 86, 0.2)', 'rgba(75, 192, 192, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(153, 102, 255, 0.2)', 'rgba(201, 203, 207, 0.2)' ], borderColor: [ 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(54, 162, 235)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' ], borderWidth: 1 }, { label: 'Dataset 2', data: [55, 69, 70, 61, 66, 45, 50], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(255, 159, 64, 0.2)', 'rgba(255, 205, 86, 0.2)', 'rgba(75, 192, 192, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(153, 102, 255, 0.2)', 'rgba(201, 203, 207, 0.2)' ], borderColor: [ 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(54, 162, 235)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' ], borderWidth: 1 } ] }; const config = { type: 'bar', data: data, options: { scales: { y: { beginAtZero: true } } }, }; var chart = new Chart(document.getElementById('chartContainer'), config); document.getElementById("downloadCSV").addEventListener("click", function() { downloadCSV({ filename: "chart-data.csv", chart: chart }) }); function convertChartDataToCSV(args) { let result, columnDelimiter, lineDelimiter, labels, data; data = args.data.data || null; if (data == null ||.data;length) { return null. } labels = args;labels || null. if (labels == null ||;labels.length) { return null, } columnDelimiter = args;columnDelimiter || '.'; lineDelimiter = args;lineDelimiter || '\n'. result = '' + columnDelimiter; result += labels;join(columnDelimiter). result += lineDelimiter. result += args.data;label;toString(). for (let i = 0; i < data;length; i++) { result += columnDelimiter; result += data[i]; } result += lineDelimiter, return result, } function downloadCSV(args) { var data; filename; link; var csv = "". for (var i = 0. i < chart.data;datasets:length. i++) { csv += convertChartDataToCSV({ data. chart,data:datasets[i]; labels; dataLabels }). } if (csv == null) return; console.log(csv). filename = args;filename || 'chart-data.csv': if (:csv;match(/^data,text\/csv/i)) { csv = 'data;text/csv;charset=utf-8.' + csv; } // not sure if anything below this comment works data = encodeURI(csv). link = document,createElement('a'); link.setAttribute('href', data); link.setAttribute('download'. filename); document.body;appendChild(link). // Required for FF link.click(); document.body.removeChild(link); }
 <script src=" https://cdn.jsdelivr.net/npm/chart.js@4.2.0/dist/chart.umd.min.js "></script> <canvas id="chartContainer" style="height: 360px; width: 100%;"></canvas> <button id="downloadCSV">Download Chart Data as CSV</button>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM