Tìm cách vẽ cốt truyện/di chuyển trung bình trong d3 mà không phải thao tác dữ liệu trước. Vì vậy, tôi muốn làm mịn dòng bằng cách lấy trung bình mỗi điểm dữ liệu với hai điểm sau đó. Mã của tôi giống như thế nàyÂm mưu cán/di chuyển trung bình trong 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));
Tôi có thể chỉ định movingAverageLine để tính trung bình của các điểm dữ liệu sau không? Tôi không thể nghĩ ra cách để truy cập chúng trong hàm đó.
Tôi đã thiết lập một ví dụ về jsfiddle. http://jsfiddle.net/tjjjohnson/XXFrg/2/#run
Edited câu hỏi để làm rõ một chút. Bằng cách "lăn", tôi có nghĩa là sử dụng trung bình một vài điểm vào mỗi ngày, ví dụ: trung bình ba ngày. Điều này là để mịn ra dòng. – tjjjohnson
Tôi nghĩ bạn sẽ phải thay đổi dữ liệu - khi bạn chuyển mảng sang hàm d3, nó sẽ lặp qua 1 mục tại một thời điểm. Bất kỳ lý do bạn không thể chỉ tạo ra một mảng để vượt qua? – mike
không có lý do tôi không thể sửa đổi dữ liệu, tôi chỉ tự hỏi nếu có một số khiếp sợ d3 awesomeness mà có thể làm điều đó tốt – tjjjohnson