我正在尝试创建类似于此示例的内容:Wealth and Health of Nations:
我的数据来自 JSON 文件,就像示例一样,但是当我添加转换时,我得到了重复的气泡。而不是气泡从 A 点过渡到 B 点,我得到 2 个气泡(一个用于 A 点,一个用于 B 点)。一般来说,转换无法区分同一气泡的 2 个数据点或 2 个单独的气泡。
看这个例子,我错过了 interpolate 和 bisect 函数。我无法理解它们是如何工作的,以及我到底做错了什么。这是导致我的图表出现问题的原因吗?
另外,有人可以给我一个关于平分线和插值如何在 d3 中工作的例子吗?
代码:
g = d3.select("#animation")
.append("svg")
.attr("width", width)
.attr("height", height);
x_extent = [0, 100];
x_scale = d3.scale.linear().domain(x_extent).range([margin + 20, width - 30]);
y_extent = [0, 60];
y_scale = d3.scale.linear().domain(y_extent).range([height - margin, margin]);
r_scale = d3.scale.linear().domain([0, d3.max(jsondata, function (d) { return d.MSVMMboe; })]).range([2, 30]);
g.selectAll("circle").data(jsondata, function (d) { return d.EffectiveDate; }).enter().append("circle")
.attr("cx", function (d) { return x_scale(d.PercentageComplete * 100) })
.attr("cy", function (d) { return y_scale(d.GPoS * 100) })
.attr("r", function (d) { return r_scale(d.MSVMMboe) })
.attr("stroke", "blue")
.attr("stroke-width", 1)
.attr("opacity", 0.6)
.attr("fill", "red");
//add transition
g.selectAll("circle").data(jsondata, function (d) { return d.EffectiveDate; })
.transition()
.duration(1000);