Dygraph独立系列没有联盟?

时间:2014-04-30 13:42:17

标签: javascript dygraphs

所以我知道您可以在Dygraph中使用如下数组定义独立系列:

[
  [1, null, 3],
  [2, 3, 7],
  [3, null, 7],
]

我从几个不同的数据流中获取数据。让我们说D1和D2。我加载D1然后加载D2并一次添加一行数据。我真的没有办法将D1和D2合并为一个阵列。我只是在他们到达时一次添加一行:

[
  [1, null, 3],
  [2, 3, 7],
  [3, null, 7],
  [3, 15, null],
]

所以你可以看到现在有两行,其中3为x值。这一切都显示在图表上就好了。将鼠标悬停在图表上的点上时会出现问题。只有以3开头的第一行才会显示图例值。 x = 3的第二行从不显示图例值。

以下是此操作的演示:

http://jsfiddle.net/cryptdemon/6WWtz/

以下是两个x = 3行联合的示例,它可以正常显示两个系列的值:

http://jsfiddle.net/cryptdemon/AYzH2/

有没有办法让两个系列显示非联合行的值?我将来自两个独立源的时间戳数据绘制成图形,这些源加载在仅{timestamp, deviceid, value}的大json数组中。你能想到这方面的任何变通方法,还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

不。您必须自己联合数据。编写算法并不算太难。祝你好运!

答案 1 :(得分:0)

我决定做的就是使用Google的可视化库来合并行。我已经在使用谷歌的Dygraph数据表了,所以很容易使用他们的另一大块API:

https://developers.google.com/chart/interactive/docs/reference#google_visualization_data_group

这是我想出的:

var tblCols = Array(numColumnsInTable);

/**
* This is used to union table rows as an aggregator
* function for the google table group
*/
var union = function(values){
    for(var i = 0; i<values.length; i++){
      //our rows are all mutually exclusive
      //except for the x value, so we just
      //look for a value that isn't null
      if(values[i] != null){
        return values[i];
      }
    }
    return null;
  }
}

for(var i=0; i<tblCols.length; i++){
  tblCols[i] = {
    'column' : i+1, 
    'aggregation' : union, 
    'type': 'number'
  }
}

var groupedTable = google.visualization.data.group(
    originalTable, 
    [0], //group by 0th column
    tblCols //columns to put in new table
);

chart.updateOptions({'file': groupedTable});