我正在使用dygraph来绘制一段时间内的温度读数。 我希望在y轴上添加2行代表高/低阈值。
目前正在通过使用2个额外的常数数据系列实现这一目标,但我怀疑还有更好的方法。
underlayCallback
似乎是更好的选择,但我不清楚如何使用canvas.fillRect
和g.toComCoords
属性绘制线条。
目前正在处理呈现垂直线的下面的示例(http://dygraphs.com/tests/highlighted-region.html)。 任何帮助表示赞赏。
var g = new Dygraph(
document.getElementById("div_g"),
data,
{
labels: ['X', 'Est.', 'Actual'],
animatedZooms: true,
underlayCallback: function(canvas, area, g) {
var bottom_left = g.toDomCoords(300, -20);
var top_right = g.toDomCoords(301, +20);
var left = bottom_left[1];
var right = top_right[0];
canvas.fillStyle = "rgba(255, 0, 0, 1)";
canvas.fillRect(right, area.y, 1, area.h);
}
}
);
对于任何有兴趣的人,使用以下方法来达到预期效果:
underlayCallback: function(canvas, area, g) {
var LowCoords = g.toDomCoords(0, 2.25);
var HighCoords = g.toDomCoords(0, 4);
var high = HighCoords[1];
var low = LowCoords[1];
canvas.fillStyle = 'red';
canvas.fillRect(area.x, low, area.w, 2);
canvas.fillStyle = 'blue';
canvas.fillRect(area.x, high, area.w, 2);
}
答案 0 :(得分:1)
这是一个概念验证插件,它正是这样做的:
https://github.com/danvk/dygraphs/pull/215
即使插件不是主要源代码库的一部分,您也可以使用该插件,但我建议重命名该插件,因为它使用的是Dygraph命名空间。
答案 1 :(得分:1)
替代。解决方案:我想要虚线;这样做了:
underlayCallback: function(ctx, area, g) {
var LowCoords = g.toDomCoords(0, 2.25);
var HighCoords = g.toDomCoords(0, 4);
var high = HighCoords[1];
var low = LowCoords[1];
ctx.beginPath();
ctx.setLineDash([5,15]);
ctx.moveTo(0, low);
ctx.lineTo(10000, low);
ctx.strokeStyle = 'red';
ctx.stroke();
ctx.moveTo(0, high);
ctx.lineTo(10000, high);
ctx.strokeStyle = 'red';
ctx.stroke();
ctx.setLineDash([]);
}