D3js 随着时间的推移绘制?

D3js draw over time?

我正在尝试在地图上绘制几个月内的地震。使用以下代码,我绘制了所有地震事件,但我想缩放时间段并使其像视频一样。

svg.selectAll(".shock")
 .data(data)
 .enter().append("circle")
 .attr("class", 'shock')
 .attr("r", 5)
 .attr("transform", function(d) {
    return "translate(" + projection([
        d.lng,
        d.lat
    ]) + ")";
 });        

如何在 15 秒的动画中显示所有这些地震? 我想到的一种方法是:将所有圆圈(按日期排序)附加 radius 0,然后增加第一个圆圈的半径,然后 setTimeout 增加下一个圆圈的半径,依此类推。 .有什么更好的方法吗?

我知道时间尺度,但不知道如何使用它们来绘制时间?

首先在动画持续时间内缩放最小和最大时间(使用 .getTime()

var timeScale = d3.scale.linear()
                    .domain([min, max])
                    // a one second delay before we start + 14 seconds of earthquakes
                    .range([1000, 15000])

然后只要设置超时时间就可以根据缩放的时间显示点数

...
.attr("display", function (d) {
    // set a timeout to show this at the right time
    var self = this;
    setTimeout(function () {
        d3.select(self).attr("display", "block")
    }, timeScale((new Date(d.When)).getTime()));

    return "none";
})

Fiddle - http://jsfiddle.net/4c1ukb1z/ - 您需要根据您的代码/数据结构更新投影和 When 属性解析。


当然,如果您正在获取日期时间对象,也可以使用时间尺度来执行此操作。