javascript - 如何更改现有 D3 可视化的数据并执行转换?
问题描述
我使用以下代码创建了一个可视化元素,它按预期显示了所有内容:
var linkTopicComments = vis.selectAll(".linktopics")
.data(topicLinks)
.enter().append("path")
.attr("class", "linktopics")
.attr("d", topicDiagonal)
.attr("opacity", "0.3");
后来,我使用下面的代码更新了关联数据,只是简单地改变了x坐标的值。在这段代码topicLinks
中是全局的,vis
是我的可视化
for (var i = 0; i < topicLinks.length; i++) {
topicLinks[i].source.x-=25;
}
最后,我使用以下代码更新了可视化:
var linkTopicComments = vis.selectAll(".linktopics")
.data(topicLinks)
.transition();
不幸的是没有更新。知道如何解决这个问题吗?
解决方案
在 D3 中,selection.transition
创建从初始状态到最终状态的转换。例如...
selection.attr("foo", 1)//initial state
.transition()
.attr("foo", 20)//final state
... 将属性foo
从 1 转换为 20。顺便说一下,由于我们没有设置任何持续时间,因此将应用默认的 250 毫秒持续时间。
在你的情况...
var linkTopicComments = vis.selectAll(".linktopics")
.data(topicLinks)
.transition();
...你没有过渡任何东西,因为在之后的链中没有任何东西,transition()
分号证实了这一点。
解决方案非常简单:明确告诉 D3 你想要转换什么。例如:
var linkTopicComments = vis.selectAll(".linktopics")
.data(topicLinks)
.transition()
.attr("d", topicDiagonal);
推荐阅读
- windows-10 - Win10 Pro/Hyper-V无法启动任何机器,“开机失败:系统找不到指定的路径”
- google-sheets - MATCH 的搜索键可以是一行值吗?
- c++ - 嗨,我正在尝试将集合的特定节点添加到列表中,该列表位于哈希表中
- html - CSS网格div高度自动
- angular - 如何转换 Http 调用?
- opcode - 我有操作码,但没有它运行的芯片。如何确定它是什么指令集架构?
- c++ - QT 如何在屏幕上点击,让一个Label出现在同一个位置?
- c# - Webapi 调用抛出异常
- database - 我应该为 SQLite 中的 Date 列使用什么数据类型,其值为“2015-11-09”和“Nov-15”?
- c# - db、EF 中的 DELETE 语句冲突 REFERENCE 约束