【问题标题】:How can I update a bar chart in d3.js?如何更新 d3.js 中的条形图?
【发布时间】:2013-10-31 00:31:39
【问题描述】:

每当用户单击按钮时,我都会尝试更新 d3.js 条形图。

我一直想在某处添加一个转换,如 show here,但它不会即时更新我的​​数据。

我正在处理这个jsfiddle

我尝试过类似下面的代码,但它没有更新我的数据:

btn.onclick = function(){
  data.push({date: new Date(2013, 3, 10), total: 78});
  updatePlot();
}

function updatePlot(){
  d3.select('#graphTest').transition();
}

如何更改我的 updatePlot 方法以更新条形图中的数据?

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    您似乎跳过了几个步骤。 D3 实际上并没有在幕后为你做很多魔法。您仍然需要自己推送数据并更新 DOM。 D3 只是提供了一个方便的编程模型来管理这个过程。

    因此,对于任何可视化,您都会获得以下有趣的部分:

    1. 数据数组
    2. DOM 节点
    3. 数据数组元素绑定到 DOM 节点。
    4. DOM 节点上的属性和样式。

    您的代码正在更新数据数组,但它不管理任何其他部分。您需要将更新后的数据驱动回 DOM(特别是使节点可见的属性/样式)。

    所以更新情节需要做以下事情:

    1. 调用selection.data 将新数据绑定到现有DOM。您可以定义一个关键函数来控制数据如何映射到 DOM 节点。
    2. 随心所欲地处理enterexitupdate 选择。
    3. 根据新数据转换属性和样式。

    对于#3,这不仅仅是调用selection.transition 的问题,而是您需要考虑您希望转换哪些属性和样式。在转换中调用 attrstyle 与在选择中调用它们完全一样,只是 DOM 会使用插值更新多次,而不是仅使用最终值更新一次。

    为了更好地理解这个过程,您应该阅读Thinking with JoinsWorking with Transitions

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 2019-08-24
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多