13

我有一个看起来像这样的 csv 文件:

week,value1,value2
1,2,3
2,7,9

我想使用谷歌图表绘制它的堆积图(周是我的 x(水平)值,values1 和 values2 是两组 y)。不幸的是,我没有找到任何简单的方法来做到这一点。这可能与我在 js 中完全是个菜鸟有关。

有什么简单的方法可以做到这一点吗?

4

3 回答 3

17

jquery-csv 库提供了将 csv 字符串转换为数组供(google.visualization.arrayToDataTable()他们的示例在这里)使用的能力。为了使这项工作,将 jquery.csv.js 添加到您的服务器(在下面的示例中,我假设它与您的 HTML 位于同一文件夹中)并在您的<head>. 以下是一个简单的脚本,您可以添加到您的脚本中<head>以开始使用。我假设一个散点图,但这个过程适用于这里的任何图表。您还需要一个<div>withid="chart"才能正常工作。

// load the visualization library from Google and set a listener
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);

// this has to be a global function
function drawChart() {
   // grab the CSV
   $.get("example.csv", function(csvString) {
      // transform the CSV string into a 2-dimensional array
      var arrayData = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar});

      // this new DataTable object holds all the data
      var data = new google.visualization.arrayToDataTable(arrayData);

      // this view can select a subset of the data at a time
      var view = new google.visualization.DataView(data);
      view.setColumns([0,1]);

     // set chart options
     var options = {
        title: "A Chart from a CSV!",
        hAxis: {title: data.getColumnLabel(0), minValue: data.getColumnRange(0).min, maxValue: data.getColumnRange(0).max},
        vAxis: {title: data.getColumnLabel(1), minValue: data.getColumnRange(1).min, maxValue: data.getColumnRange(1).max},
        legend: 'none'
     };

     // create the chart object and draw it
     var chart = new google.visualization.ScatterChart(document.getElementById('chart'));
     chart.draw(view, options);
  });
}
于 2013-07-21T19:38:00.953 回答
2

我一直在寻找一段时间,并在谷歌小组讨论中找到了解决方案。 https://groups.google.com/forum/#!topic/google-visualization-api/cnXYDr411tQ

我已经尝试过了,它有效!

在这种情况下,我们必须指定 csv 文件的标头类型。

var queryOptions = {
    csvColumns: ['number', 'number', 'number' /* Or whatever the columns in the CSV file are */],
    csvHasHeader: true /* This should be false if your CSV file doesn't have a header */
}
/* csvUrl is the path to your csv */    
var query = new google.visualization.Query(csvUrl, queryOptions);
query.send(handleQueryResponse);

function handleQueryResponse(response) {

    if (response.isError()) {
        alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }

    var data = response.getDataTable();

    var chart = new google.visualization.ColumnChart(document.getElementById('your div'));
    // Draw your chart with the data table here.
    // chart.draw(view, queryOptions);
}
于 2019-02-11T22:19:50.127 回答
0

您使用哪种服务器端脚本语言(php、asp)?

一种选择是从保存在 Google Drive 中的电子表格中导入数据,请参阅此处以获取基于 PHP 的从 Google Docs 中保存和提取数据的示例。这将使您能够更新电子表格,并且图表将自动绘制新数据。

于 2013-01-10T13:16:58.050 回答