【问题标题】:How to change the data of an existing D3 visualization and perform a transition?如何更改现有 D3 可视化的数据并执行转换?
【发布时间】:2020-02-16 14:10:03
【问题描述】:

我使用以下代码创建了一个可视化元素,它按预期显示了所有内容:

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();

很遗憾,没有任何更新。知道如何解决这个问题吗?

【问题讨论】:

    标签: javascript d3.js transition


    【解决方案1】:

    在 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);
    

    【讨论】:

    • 感谢工作。我需要帮助的另一件事是我必须重新绘制基于新标准的相同可视化。我不知道如何洗牌/重新绘制整个可见光?我有一个正在运行的可视化,我需要使用新的标准对整个可视化进行排序?如何在 D3 中实现?
    • 请将此作为新问题发布,并附上相关详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2023-03-22
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多