如果不是第一个

时间:2015-07-21 09:43:52

标签: javascript dygraphs

也许听起来很愚蠢,但我的csv的第一列不是日期字段。

我可以手动编辑CSV以更改列顺序,然后像魅力一样工作,但由于文件是自动生成的,我不能经常这样做。

如果不是第一个,有没有办法设置日期栏?

编辑:这里有我的csv样本

Test server;Date/Time;Latency (ms);Dowload Speed (Kb/s);Upload Speed (Kb/s)
TVAlmansa S.L. (Almansa) [50.87 km];2015/07/07 11:00:31;67.94;57975;25226
Grupo TVHoradada (Pilar De La Horadada) [87.32 km];2015/07/07 12:00:32;46.11;58484;25433
Grupo TVHoradada (Pilar De La Horadada) [87.32 km];2015/07/07 13:00:31;43.75;55262;24106
TVAlmansa S.L. (Almansa) [50.87 km];2015/07/07 14:00:39;89.39;55266;12722
TVAlmansa S.L. (Almansa) [50.87 km];2015/07/07 15:00:35;69.24;56732;22550

解决方案的第一步

正如@danvk所说,似乎dygraphs将csv文件中的第一列作为日期参数。没有办法改变这个,我只能在一个数组中加载csv文件,然后设置我想要显示的列。

解决方案

最后我使用了一些基于这篇文章的代码来加载和解析我的csv文件。这是完整的代码

  //AJAX query for CSV file
  var req = new XMLHttpRequest();
  req.onreadystatechange = function () {
    if (req.readyState == 4) {
      if (req.status === 200 || // Normal http
          req.status === 0) { // Chrome w/ --allow-file-access-from-files
        var data = req.responseText;
        drawGraph(data);
      }
    }
  };
  req.open('GET', 'bandwith_report.csv', true);
  req.send(null);

  //Graph draw function
  var drawGraph = function(data) {
    //data threatment (select columns)
    var parsed_data = toArray(data);
    var firstRow = parsed_data[0];
    var data = parsed_data.slice(1); // Remove first element (labels)

    //data display
    graph = new Dygraph(
      "graphdiv2", //div
      data,
      {
        labels: firstRow
      }
    );
  }

  var toArray = function(data) {
    //load lines
    var lines = data.split("\n");
    var arry = [];

    //parse lines
    for (var idx = 0; idx < lines.length; idx++) {
      var line = lines[idx];
      // Oftentimes there's a blank line at the end. Ignore it.
      if (line.length == 0) {
        continue;
      }
      var row = line.split(";");

      // Special processing
      // remove first field (including header)
      row.splice(0,1);

      // parse data (except header)
      if (idx > 0) {
        row[0] = new Date(row[0]); // Turn the string date into a Date.

        // turn string into float
        for (var rowIdx = 1; rowIdx < row.length; rowIdx++) {
          // Turn "123" into 123.
          row[rowIdx] = parseFloat(row[rowIdx]);
        }     
      }     
      arry.push(row);
    }     
    return arry;
  }

1 个答案:

答案 0 :(得分:1)

没有。 dygraphs假设第一列是独立(x)轴。如果不是,那么您需要修改数据才能实现。您可以手动执行此操作,而不是手动执行此操作。