【问题标题】:Updating d3 bar chart labels with new data of variable length使用可变长度的新数据更新 d3 条形图标签
【发布时间】:2016-06-23 23:31:03
【问题描述】:

我正在使用 d3 绘制一个带有标签的简单条形图,并希望能够使用新数据更新图表,这些数据可能比现有图表具有更多或更少的项目。我知道我需要使用 enter/update/exit,但我在选择和使更新正常工作时遇到问题。我将条形图和标签组合在一起,当我尝试更新时,我不断向组中添加另一个条形而不是更新它。

我正在使用此功能进行更新:

function updateChart(){
x.domain([0, d3.max(data, function(d) { return d.count; })]);
chart = d3.select('.chart');

bar = chart.selectAll('g')
        .data(data);

// Enter…
bar.enter().append('g')
    .attr('transform', function(d, i) { return 'translate(0,' + (i * (barHeight+barMargin)) + ')'; });

bar.append('rect')
    .attr("x", labelW)
    .attr("height", barHeight)
    .attr('width', 0)
    .transition()
    .duration(500)
    .attr('width', function(d) { return x(d.count); });

// Update…
bar.transition()
    .duration(500)
    .attr('width', function(d) { return x(d.count); });

// Exit…
bar.exit()
    .remove();
}

【问题讨论】:

    标签: javascript d3.js charts bar-chart


    【解决方案1】:

    我改变了几件事:

    • 在你的更新函数中,应该是newData,而不是data
    • 将值设置为barMargin
    • bar.text 添加到更新功能中。

    但最重要的是为数据提供密钥,如下所示:

    .data(newData, function(d){ return d.value});
    

    这里是小提琴:https://jsfiddle.net/gerardofurtado/fybLrujp/2/

    【讨论】:

    • 哦,我没注意到猕猴桃……给我几分钟
    • 完成,检查新小提琴(编辑后的答案)。但是听着,这只是为了向您展示它是如何完成的,您的代码现在有几个问题。例如,如果您多次单击“更新”,您会看到它添加了新的文本元素,这些元素会堆积起来。
    • 第一个 g 元素有 2 组条,因为文本存在相同的问题。实际上,如果您多次单击更新,您将有几组酒吧。我刚刚做了一个新的小提琴(再次!)解决了这个问题,请检查。
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2019-03-20
    • 2013-08-02
    相关资源
    最近更新 更多