所以基本上,我想在时间序列折线图的一定数量的点上画曲线平均线。就像这样:javascript canvas:用曲线绘制移动平均线
我希望它跨越图表的整个长度,但我无法弄清楚如何计算的起点和终点,因为平均会(我认为)是一个点每个部分的中间。看着股票图表与移动平均线,你可以看到我想要什么acheive:
我通过拆分数据阵列成基于一段时间块先计算平均值。所以,如果我开始:
[
{ time: 1, value: 2 },
{ time: 2, value: 4 },
{ time: 3, value: 5 },
{ time: 4, value: 7 },
]
我到:
var averages = [
{
x: 1.5,
y: 3,
},
{
x: 3.5 (the average time)
y: 6 (the average value)
},
]
这是我已经试过,我结束了一个不完整的线,一个这并不在图表的起点开始并没有停在最后,但明星和第一次平均时间在图表内:
ctx.moveTo((averages[0].x), averages[0].y);
for(var i = 0; i < averages.length-1; i ++)
{
var x_mid = (averages[i].x + averages[i+1].x)/2;
var y_mid = (averages[i].y + averages[i+1].y)/2;
var cp_x1 = (x_mid + averages[i].x)/2;
var cp_x2 = (x_mid + averages[i+1].x)/2;
ctx.quadraticCurveTo(cp_x1, averages[i].y ,x_mid, y_mid);
ctx.quadraticCurveTo(cp_x2, averages[i+1].y ,averages[i+1].x, averages[i+1].y);
}
ctx.stroke();
你会怎么做到这一点?