我正在尝试从d3pie.js库更新一个饼图,但是必须缺少一些基本的东西。
我有两个对我来说看起来相同的脚本,唯一的区别是更新是通过按下按钮进行的,而另一个是在页面加载时进行的。第二个脚本Uncaught TypeError: Cannot read property 'value' of undefined
也出现错误。我确实得到一张图表,那是错误的图表;代替2片,得到3(2个具有相同的颜色)。 pullOutSegment
事件也无法正常工作,因此饼图确实有些混乱。 pie
对象看起来有所不同,也许这就是为什么第二个脚本失败的原因,但我不知道要获得正确的脚本。自昨天以来一直在我的头上。脚本包含在下面,第一个是工作代码,第二个是失败的代码。
任何帮助,高度赞赏!
<html>
<head></head>
<body>
<input type="button"; value="Add Data"; id="addData" />
<div id="pie"></div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src='https://d3js.org/d3.v4.min.js'></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/d3pie/d3pie.min.js"></script>
<script>
function piechartData() {
var data = [
{label: "1", value: 1},
{label: "2", value: 4},
{label: "3", value: 3}
];
var pie = new d3pie("pie", {
data: {
content: data
}
});
return pie
};
</script>
<script>
// create a piechart
pie = piechartData();
$(function() {
//clear the data
data = [];
$("#addData").on("click", function() {
//when button pressed push these and update the piechart
data.push({"label": "4", "value": 8});
data.push({"label": "51", "value": 3});;
pie.updateProp("data.content", data);
});
});
</script>
</body>
</html>
<html>
<head></head>
<body>
<div id="pie"></div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src='https://d3js.org/d3.v4.min.js'></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/d3pie/d3pie.min.js"></script>
<script>
function piechartData() {
var data = [
{label: "1", value: 1},
{label: "2", value: 4},
{label: "3", value: 3}
];
var pie = new d3pie("pie", {
data: {
content: data
}
});
return pie
};
</script>
<script>
// make a piechart
pie = piechartData();
//create new data and update the piechart
data = [];
data.push({"label": "4", "value": 8});
data.push({"label": "51", "value": 3});
pie.updateProp("data.content", data);
</script>
</body>
</html>
最佳答案
第二个示例清除svg(updateProp
)的内容,但不清除所有转换。他们仍然住在d3内部。
如果您等到初始动画完成后
setTimeout(() => {
data = [];
data.push({"label": "4", "value": 8});
data.push({"label": "51", "value": 3});
pie.updateProp("data.content", data);
}, 5000);
一切正常。
我不知道在所有动画d3pie完成后是否有一种简单的方法来获取回调。
关于javascript - 使用d3pie.js饼图进行数据更新时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52296737/