堆积条形图未正确更新d3js

时间:2018-01-24 14:50:10

标签: javascript d3.js

this堆积条形图中,我添加了平分线和自定义x.invert功能,以便您可以阅读每个月的值:

问题在于,当我添加此自定义功能时,团队2& 3不再更新现有的rect,但是当您从选择下拉列表中选择不同的类别时,我会从左上角重新绘制条形图,我不知道为什么。

删除与x.invert函数相关的所有代码会使条形图再次正确更新,因此它可能与x域有关,但我不确定。

2 个答案:

答案 0 :(得分:2)

在绑定数据时使用键功能是D3中非常好的做法,可确保对象的持久性。因此,与接受其他答案中的建议相反,您不应将其删除。

而不是删除它,只需修复关键功能。现在的问题是因为键是......

["Team 1 CC", "Team 2 CC", "Team 3 CC"]

...对于选定的数据集,这......

d.key.split(' ')[0]

..将为每个组返回TEAM,并且键显然不能相同。

所以,就这样......

d.key.split(' ')[0] + d.key.split(' ')[1]

甚至只是......

d.key.slice(0, -3)

...将返回:TEAM 1TEAM 2TEAM 3

以下是您更新的Plunker:https://plnkr.co/edit/XCvmDj9a3yF37dzDmA6d?p=preview

答案 1 :(得分:1)

这段代码看起来像你的错误:

let barGroups = g.selectAll("g.layer")
  .data(stacking, d=>d.key.split(' ')[0]);

您将第二个参数传递给.data方法。根据{{​​3}}:

  

selection.data([data [,key]])

     

...可以指定一个关键功能来控制哪个   datum分配给哪个元素,替换默认值   通过计算每个数据的字符串标识符来连接索引   元件。

如果删除它,您的可视化文件将有效docs