【问题标题】:One canvas, two sets of data一张画布,两组数据
【发布时间】:2012-11-01 23:42:17
【问题描述】:

所以我有两组数据,我们称它们为 A 和 B,然后是一个画布 X

所以首先我这样做:

var selection=canvas.selectAll("circle")
                    .data(A)                    
selection.enter().append("circle")
selection
   .attr(...)
   .attr(...)

所以这可以满足我的需求,并创建了我的第一组圈子。但是后来我想根据数据 B 制作第二组具有不同属性的圆圈,所以我尝试执行以下操作:

var selection2 = canvas.selectAll("circle")
selection2.enter().append("circle").data(B)
selection2
  .attr(...)
  .attr(...)

但这似乎不起作用,并且 selection2 会干扰选择一。我该如何让它发挥作用?

【问题讨论】:

  • var selection2 = canvas.selectAll("circle") selection2.enter().append("circle").data(B) 我认为你需要将.data(B) 放在第一行以与第一个数据集保持一致

标签: javascript canvas d3.js


【解决方案1】:

只需将它们添加为具有不同选择器的元素...例如

var selection2 = canvas.selectAll(".circleb")
selection2.enter().append("circle").data(B)
selection2
  .classed(".circleb")
  .attr(...)
  .attr(...)

使用您当前的方法,您正在选择所有 circle 元素(当前绑定到数据集 A),并尝试将它们重新绑定到数据集 B。通过使用不同的选择器(根据我的例如)您创建了绑定到数据集 B 的第二组元素,而将原始元素绑定到数据集 A。

编辑以修复夜间故障(如 cmets 中所指出的)

【讨论】:

  • 但是 "circleb" 不是像 "circle" 或 "rect" 那样的正确 svg 类型,所以使用它不会给我带来某种错误吗?
  • 没关系,我想通了。 select all 的参数可以是您想要的任何参数,但是 append 必须采用适当的 svg 类型。所以它:canvas.selectAll(circle2);追加(圆圈)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多