gpt4 book ai didi

javascript - 使用 d3.js 更新圆环图

转载 作者:行者123 更新时间:2023-11-30 00:00:02 26 4
gpt4 key购买 nike

我现在已经工作了几个小时,但我无法使用 d3.js 绘制我的圆环图以更新到新数据。

我的 HTML 是,

  <body>
<div id="pie"></div>
<script src="pie.js"></script>
</body>

我的 JS 是,

var dataset = [40, 20];

var width = 460,
height = 300,
radius = Math.min(width, height) / 2;

var color = ['#000000', '#FFFFFF'];

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

function render() {
var pie = d3.pie()
.sort(null);

var arc = d3.arc()
.innerRadius(radius - 100)
.outerRadius(radius - 50);

var path = svg.selectAll("path")
.data(pie(dataset))
.enter().append("path")
.attr("fill", function(d, i) { return color[i]; })
.attr("d", arc);
}

render();

function update() {

dataset[0] = 100;

render();
}

目前这会绘制圆环图,但每当我从控制台调用 update() 函数时,数据集都会更新,但圆环图不会在屏幕上更新。

我找到了一些其他的条形图示例(使用输入、附加和退出),但我无法让它们与我的示例一起使用。

任何帮助将不胜感激,谢谢!

最佳答案

如您所知,您只是在更新数据,不会更改图表。您还知道,要更改图表,您必须设置“更新”选项。

现在,您只有一个“输入”选项:

var path = svg.selectAll("path")
.data(pie(data)).enter().append("path")
.attr("fill", function(d, i) { return color[i]; })
.attr("d", arc);

因此,每次您更改数据集 时,您的图表中不会发生任何事情,因为您的“输入”选择是空的。您可以只选择不存在的内容:

var path = svg.selectAll(".foo")

但这是一个糟糕的解决方案,因为您将在 SVG 中堆积一堆路径。

因此,最好的解决方案是创建“输入”和“更新”选择:

//this binds the data:
var path = svg.selectAll("path")
.data(pie(data));

//this is the "enter" selection:
var pathEnter = path.enter().append("path")
.attr("fill", function(d, i) { return color[i]; })
.attr("d", arc);

//this is the "update" selection:
var pathUpdate = path.attr("d", arc);

检查这个演示:

var dataset = [40, 20];

var width = 300,
height = 200,
radius = 150;

var color = ['#222', '#EEE'];

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

function render(data) {
var pie = d3.pie()
.sort(null);

var arc = d3.arc()
.innerRadius(radius - 100)
.outerRadius(radius - 50);

var path = svg.selectAll("path")
.data(pie(data));

var pathEnter = path.enter().append("path")
.attr("fill", function(d, i) {
return color[i];
})
.attr("d", arc);

var pathUpdate = path.attr("d", arc);


}

render(dataset);

setInterval(function() {
update();
}, 2000);

function update() {

dataset = [Math.random() * 50, Math.random() * 50];

render(dataset);
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<div id="pie"></div>

关于javascript - 使用 d3.js 更新圆环图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40815889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com