dygraph:显示最大值和最小值

时间:2015-02-19 19:31:50

标签: dygraphs

我的问题类似于Horizontal line to show average in dygraph,但不一样。我理解使用underlayCallback,但如何获取基础数据来计算数据的最大值和最小值。我要在数据中突出显示这一点,这是从csv文件中读取的,如:gplot.updateOptions({'file': filename});并且我事先不知道文件名,因此必须动态计算最大值,最小值。我觉得它与gplot.rawData_有某种关系,但无法弄清楚如何。

感谢。

1 个答案:

答案 0 :(得分:4)

您可以查询Dygraph的数据集,使用getValue method获取最小值和最大值,如下所示:

// Calculate the min/max y value in the Dygraph's data set.
function calcMinMax(g) {
  var ymin = g.getValue(0, 1), ymax = g.getValue(0, 1), v;
  for (var i = 0; i < g.numRows(); i++) {
    for (var j = 1; j < g.numColumns(); j++) {
      y = g.getValue(i, j);
      if (y < ymin) {
        ymin = y;
      } else if (y > ymax) {
        ymax = y;
      }
    }
  }
  return [ymin, ymax];
}

要绘制线条,您需要使用underlayCallback,例如

underlayCallback: function(ctx, area) {
  var mm = calcMinMax(this),
      ymin = mm[0],
      ymax = mm[1],
      canvasYmin = this.toDomYCoord(ymin),
      canvasYmax = this.toDomYCoord(ymax);
  ctx.strokeStyle= 'red';
  ctx.beginPath();
  ctx.moveTo(area.x, canvasYmin);
  ctx.lineTo(area.x + area.w, canvasYmin);
  ctx.moveTo(area.x, canvasYmax);
  ctx.lineTo(area.x + area.w, canvasYmax);
  ctx.closePath();
  ctx.stroke();       
}

有关工作示例,请参阅this jsbin