Javascript-数据插值-D3动画散点
Javascript - Data Interpolation - D3 Animated Scatter
尝试修改下面链接中的代码,以创建一个显示数据点随时间移动的动画散点。
http://bost.ocks.org/mike/nations/
挣扎着把我的头缠在数据插值部分上
// Interpolates the dataset for the given (fractional) year.
function interpolateData(year) {
return nations.map(function(d) {
return {
employee: d.employee,
category: d.category,
x:interpolateValues(d.x, year),
y:interpolateValues(d.y, year)
};
});
}
// Finds (and possibly interpolates) the value for the specified year.
function interpolateValues(values, year) {
var i = bisect.left(values, year, 0, values.length - 1),
a = values[i];
if (i > 0) {
var b = values[i - 1],
t = (year - a[0]) / (b[0] - a[0]);
return a[1] * (1 - t) + b[1] * t;
}
return a[1];
}
});
代码需要此格式的数据,其中x和y值包含一个具有相应年份和值的数组。
d: Object
category: "1"
employee: "12017512"
x: Array[63]
y: Array[63]
我传递的数据是这种格式的,每年都有一个记录。
d: Object
category: "1"
employee: "12017512"
x: 2697.3199999999993
y: 24
year: "2015"
如何修改代码以接受现有格式的数据?
设法解决了我的问题。如果它对任何人都有帮助的话,答案是使用underscore.js和下面的代码。
我还发现以下jsfiddle很有用。
http://jsfiddle.net/bgAzH/1/
groupData = _.map(_.groupBy(data, 'dimension1', 'dimension2'), function (b) {
return _.extend(_.pick(b[0], 'dimension1', 'dimension2'), {
x: _.map(b, function (elem) {
return _.pick(elem, 'time', 'x')
}),
y: _.map(b, function (elem) {
return _.pick(elem, 'time', 'y')
})
});
});
然后,当将对象数组传递到插值函数时,我将对象转换为简单数组。
var values = values.map(function (obj) { return [Number(obj.time), obj[element]]
});
相关文章:
- d3绘制动画折线图的基本示例
- D3.js-带有多个圆环和动画过渡的圆环图
- D3.js:设置贝塞尔曲线的动画
- D3/Raphael js 以慢帧率绘制 1000+ 动画圆圈
- d3 动画中的持续时间
- d3.js动画径向图示例
- d3通过改变参数化函数使折线图水平动画化
- 制作从上一个已知点到新添加点(d3)的路径(线)的动画
- 为D3.js动画编写绑定的正确方法是什么
- 如何在D3.js中设置笔划厚度的动画
- d3将鼠标悬停在表格上时,制作图表动画
- 从下到上设置d3图形的动画
- 在 d3.js 中对元素进行动画处理
- 具有平滑更新动画的 D3 折线图
- 使用 ArcTween 在 d3.js 中对弧进行动画处理
- D3 交错动画
- d3 为多条SVG线添加动画效果
- 添加链接文本到动画D3树
- 动画d3.js折线图路径退出
- 为什么动画d3 svg线在IE9中不与轴移位同步,但在IE11和Chrome中同步