Buscando una forma de trazar el promedio móvil/móvil en d3 sin tener que manipular los datos con anticipación. Así que quiero suavizar la línea promediando cada punto de datos con los dos después. Mi código es asíGráfico de movimiento/promedio móvil en d3.js
var data = [3, 66, 2, 76, 5, 20, 1, 3, 8, 90, 2, 5, 70];
var w = 20,
h = 80;
var x = d3.scale.linear()
.domain([0, 1])
.range([0, w]);
var y = d3.scale.linear()
.domain([0, 100])
.rangeRound([h, 0]);
var chart = d3.select("body").append("svg")
.attr("class", "chart")
.attr("width", w * data.length -1)
.attr("height", h);
var line = d3.svg.line()
.x(function(d,i) { return x(i); })
.y(function(d) { return y(d); })
var movingAverageLine = d3.svg.line()
.x(function(d,i) { return x(i); })
.y(function(d) { return y(d); })
chart.append("svg:path").attr("d", line(data));
chart.append("svg:path").attr("d", movingAverageLine(data));
¿Puedo especificar movingAverageLine para calcular el promedio de los siguientes puntos de datos? No puedo pensar en una forma de acceder a ellos en esa función.
He creado un ejemplo en jsfiddle. http://jsfiddle.net/tjjjohnson/XXFrg/2/#run
pregunta Editado para aclarar un poco. Al decir "rodar" me refiero al uso del promedio de varios puntos en cada día, p. promedio de tres días. Esto es para suavizar la línea. – tjjjohnson
Creo que tendrías que cambiar los datos: cuando pases la matriz a una función d3, se repetirá a través de 1 elemento a la vez. ¿Alguna razón por la que no puedes simplemente crear otra matriz para aprobar? – mike
no hay razón por la que no pueda modificar los datos, solo me preguntaba si había algún astuto d3 genial que lo hiciera bien – tjjjohnson