Also im Grunde möchte ich eine gekrümmte Durchschnittslinie über eine bestimmte Anzahl von Punkten eines Zeitreihen Liniendiagramm zeichnen. Wie folgt aus:Javascript Leinwand: zeichne bewegliche Durchschnittslinie mit Kurven
Ich will es über die gesamte Länge des Diagramms zu überspannen, aber ich kann nicht herausfinden, wie die Start- und Endpunkte zu berechnen, weil die durchschnittlichen würde (glaube ich) ein Punkt in die Mitte jedes Abschnitts. Mit Blick auf ein Lager Chart mit durchschnittlich bewegen können Sie sehen, was ich acheive wollen:
ich die Mittelwerte zunächst durch Aufteilen des Datenfeldes berechnen bis in Stücke auf einen bestimmten Zeitraum basiert. Also, wenn ich mit Start:
[
{ time: 1, value: 2 },
{ time: 2, value: 4 },
{ time: 3, value: 5 },
{ time: 4, value: 7 },
]
erreiche ich:
var averages = [
{
x: 1.5,
y: 3,
},
{
x: 3.5 (the average time)
y: 6 (the average value)
},
]
Dies ist, was ich versucht habe, wo ich mit einer unvollständigen Zeile am Ende, eine, die am Anfang des Diagramms beginnen tut und tut am Ende zu stoppen, aber Sterne und endet in der Tabelle auf der ersten Durchschnittszeit:
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();
Wie würden Sie das tun?