gpt4 book ai didi

javascript - D3 JS Sankey图中的圆环图

转载 作者:行者123 更新时间:2023-11-29 14:48:22 25 4
gpt4 key购买 nike

我有一个包含大量数据的 D3 Js Sankey 图。数据的最后总是公司。公司节点是一个简单的圆圈。但围绕那个圆圈,我想要一个圆环图,有 2 个值。这些值在公司节点内作为 numsms 和 nummid。您还可以在下图中看到这一点。

图表示例: enter image description here

所以我想在公司圈子周围画一个圆环图。但我似乎无法让它发挥作用,我只找到了 donut chart 的示例作为自己的 svg。

我的圈子代码:

svg.selectAll(".node.circle")
.append("circle")
.attr("r", function(d) {
if(d.node.indexOf("company-") > -1) {
return company_circle_size(d);
} else {
return page_circle_size(d);
}
})
.attr("cy", function(d) { return d.dy/2;})
.attr("cx", function(d) {
var cx = sankey.nodeWidth() - 30;
if(d.node.indexOf("company-") > -1) {
cx = cx + 15;
}
return cx;
})
.style("fill", function (d) {
if(d.node.indexOf("company-") > -1) {
if(d.name.indexOf("No data") > -1) {
return "grey";
}
var color = '';
switch(d.status) {
case 'Approved':
color = 'green';
break;
case 'inactive ':
color = 'red';
break;
case 'initial':
color = 'yellow';
break;
case 'review':
color = 'blue';
break;
default:
color = 'grey';
break;
}
return color;
}
return "grey";
//return d.color = color(d.name.replace(/ .*/, ""));
})
.style("fill-opacity", ".9")
.style("shape-rendering", "auto")
.style("stroke", function (d) {
return d3.rgb(d.color).darker(2);
})
.append("title")
.text(function (d) {
if(d.node.indexOf("company-") > -1) {
if(d.cpId != null) {
return d.name + "\n cpId: " + d.cpId;
}
return d.name;
}
return d.name + "\n" + format(d.value);
});

在 for 循环中,我将类名“node circle”替换为“node company”。

$(selector).attr("class", "node company")

我已经尝试了一些东西,我认为代码需要放在这里。

svg.selectAll('.company').each(function(companyNode) {
var values = [[companyNode.numsms, companyNode.nummid]];
var total = companyNode.numsms + companyNode.nummid;

if(total > 0) {
// create donut chart
}
});

最佳答案

您可以使用 foriegnObject 将一个 div 附加到节点。在该 div 中,将您的值传递给内联 jquery 迷你图(折线图、饼图等)。设置 div 的透明度,使其不会遮挡图表。将您的值添加到原始 sankey 数据数组(即 source、target、value、numsms、numid),然后在追加中使用 d.numsms 调用它们。

//sparkline plugin and setup...  http://omnipotent.net/jquery.sparkline/#s-docs
//something like the following, look at the fiddle for more info

node.append("foreignObject")
.attr("width", sankey.nodeWidth()*2)
.attr("height", function(d) { return d.dy/2 })
.attr("transform", function(d) { return "translate(" + (d.x+20) + "," + (d.y+10) + ")"; })
.append("xhtml:body")
.style("font", "14px 'Helvetica Neue'")
.html("<div>Inline Sparkline: <span class='inlinesparkline'>1,4,4,7,5,9,10</span></div>");

将 div 添加到每个节点后,调用插件以激活内联图表。

$('.inlinesparkline').sparkline(); 

看看我的 fiddle 。它不是 sankey,但它确实向您展示了如何实现 foriegnObject。

d3.js diagram with inline charts!

希望这对您有所帮助。

关于javascript - D3 JS Sankey图中的圆环图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673901/

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