【问题标题】:I want to update the data on this d3.js bar chart by clicking a button. (onclick)我想通过单击一个按钮来更新此 d3.js 条形图上的数据。 (点击)
【发布时间】:2013-10-09 09:40:01
【问题描述】:

我将如何告诉 D3 通过单击我创建的按钮来推送包含新随机数据的新图表?现在我通过刷新页面来获取新数据,但我希望能够在不重新加载页面的情况下推送新图表。

</script>
    var w = 500;
    var h = 500;
    var barPadding = 1;

    var dataset = [ ];

    for (var i = 0; i < 14; i++) {var newNumber = Math.round(Math.random() * 70);
    dataset.push(newNumber);}



    var svg = d3.select("body")
            .append("svg")
            .attr("width", w)
            .attr("height", h);

    var widthScale = d3.scale.linear()
                    .domain([0, d3.max(dataset, function(d,i) {return d;})])
                    .range([0,w]);

        svg.selectAll("rect")
            .data(dataset)
            .enter()
            .append("rect")
            .attr("x", 3)
            .attr("y", function (d,i) {return i* 36;}) 
            .attr("width", widthScale)
            .transition()
            .duration(1000)
            .attr("height", h / dataset.length - barPadding)
            .attr("fill", function(d) {return "rgb(0, 0, " + (d * 10) + ")";});

        svg.selectAll("text")
            .data(dataset)
            .enter()
            .append("text")
            .text(function(d) {return d;})
            .attr("x", function(d) {return widthScale(d) -17;})
            .attr("y", function(d,i) {return (i * 36) + 23 ;})
            .attr("fill", "white")
            .attr("font-family", "sans-serif")
            .attr("text-anchor", "middle");

【问题讨论】:

标签: javascript svg charts d3.js


【解决方案1】:

您需要指定选择的.update().exit()。理想情况下,您应该更改代码,使其只调用一次.data(dataset)

var g = svg.selectAll("g")
    .data(dataset);

然后您可以定义在 .enter() .update().exit() 上执行的操作。您的 .enter()s 将分别以 g.enter().append('rect')g.enter().append('text') 开头。虽然您需要处理.update(),但退出可以像移除对象一样简单。

g.exit()
    .remove();

对于大多数数据,每个数据的标识是索引值。如果不是这种情况,那么您需要确保提供访问器

    .data(data, function(d) { return d.name; })

我会推荐this tutorial on bar charts,它可以让您快速上手。如果它太先进,那么尝试part 1 开始。您甚至可以取消用户单击按钮进行更新的要求。

【讨论】:

  • 我将阅读您发布的链接以及有关 w3schools 的一些信息。自从我开始从零开始学习编程以来,它们仍然让我有些困惑。谢谢
  • 这些教程和答案假定您对 JavaScript 有一定程度的理解 如果您想充分利用 D3,那么我建议您先学习 JavaScript 入门。语言的典型入门文本是“Sams 在 21 天内自学 JavaScript”等。检查您当地的图书馆馆藏,在网站上搜索有关学习 JS 的现有问题,并可能在Stack Overflow Javacript Chatroom 中寻求建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2013-03-14
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2023-04-04
  • 2020-09-21
相关资源
最近更新 更多