【问题标题】:Transitions in D3 - Duplicate bubbles instead of transitioning bubblesD3 中的过渡 - 复制气泡而不是过渡气泡
【发布时间】:2012-10-29 16:41:38
【问题描述】:

我正在尝试创建类似于此示例的内容: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);

【问题讨论】:

  • 听起来你在过渡期间添加了新元素,即你有类似.data(...).append(...).transition(...)的东西。从那里删除.append(...) 或其他任何内容。如果不向我们展示实际代码,就不可能知道你到底哪里出错了。

标签: d3.js transition bubble-chart


【解决方案1】:

你没有告诉过渡你想要改变什么。例如,您需要添加一些属性更改。查看 d3 网站以获取示例和教程。

【讨论】:

  • 最初我有以下内容: g.selectAll("circle") .data(jsondata, function (d) { return d.EffectiveDate; }) .transition() .duration(1000) .attr ("cx", function (d) { return x_scale(d.PercentageComplete * 100) }) .attr("cy", function (d) { return y_scale(d.GPoS * 100) }) 我想要的泡沫do 是去下一个 (cx, cy) 点,但它不知道下一个点是哪一个。下一点具有相同的气泡名称和气泡 ID,并且具有区分它的日期 EX:气泡 A 日期 10-01-2010 ;气泡 B 日期 12-31-2010。
  • 我用 2 个不同的数据集创建了一个简单的演示,效果很好,因为我已经设置了从 dataset1 中的一个点到 datase2 中的一个点的转换,但是由于我切换到 json 文件,所有点位于单个“数据集”中,而这正是过渡现在无法识别的原因
  • 在 d3 中没有魔法——过渡无法识别任何东西,你必须告诉它该做什么。您必须确定下一个点并相应地设置属性。
  • 我明白,这就是我遇到的问题,我不确定如何识别数据集中的下一个点并告诉 D3 使用该点。我尝试在 .data(dataset, key) 中使用不同的键,但没有这样做。
  • 从您的描述看来,您需要匹配名称或 id 而不是 EffectiveDate。基本模式是选择第一个日期的所有数据并绘制气泡。然后选择具有第二个日期的数据并再次进行相同的调用,除了你调用.transition()而不是.enter()
猜你喜欢
  • 2018-03-28
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多