gpt4 book ai didi

javascript - 将 D3 工具提示应用于 donut 倍数

转载 作者:行者123 更新时间:2023-12-03 12:14:52 27 4
gpt4 key购买 nike

我有这样的代码,可以创建多个 D3 donut 倍数。

<!DOCTYPE html>
<meta charset="utf-8">
<style>

body {
font: 10px sans-serif;
}

svg {
padding: 10px 0 0 10px;
}

.arc {
stroke: #fff;
}

</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var radius = 74,
padding = 10;

var color = d3.scale.ordinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);

var arc = d3.svg.arc()
.outerRadius(radius)
.innerRadius(radius - 30);

var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.population; });

d3.csv("data.csv", function(error, data) {
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "State"; }));

data.forEach(function(d) {
d.ages = color.domain().map(function(name) {
return {name: name, population: +d[name]};
});
});

var legend = d3.select("body").append("svg")
.attr("class", "legend")
.attr("width", radius * 2)
.attr("height", radius * 2)
.selectAll("g")
.data(color.domain().slice().reverse())
.enter().append("g")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

legend.append("rect")
.attr("width", 18)
.attr("height", 18)
.style("fill", color);

legend.append("text")
.attr("x", 24)
.attr("y", 9)
.attr("dy", ".35em")
.text(function(d) { return d; });

var svg = d3.select("body").selectAll(".pie")
.data(data)
.enter().append("svg")
.attr("class", "pie")
.attr("width", radius * 2)
.attr("height", radius * 2)
.append("g")
.attr("transform", "translate(" + radius + "," + radius + ")");

svg.selectAll(".arc")
.data(function(d) { return pie(d.ages); })
.enter().append("path")
.attr("class", "arc")
.attr("d", arc)
.style("fill", function(d) { return color(d.data.name); });

svg.append("text")
.attr("dy", ".35em")
.style("text-anchor", "middle")
.text(function(d) { return d.State; });

});

</script>

我正在寻找一种实现 D3 工具提示的方法,以便当我将光标放在 donut 上时可以看到 donut 每个 block 的确切数据。据我所知,这里还有其他工具提示示例,但它们都不适用于 donut 倍数示例。

这是一些示例数据

State,Under 5 Years,5 to 13 Years,14 to 17 Years,18 to 24 Years,25 to 44 Years,45 to 64 Years,65 Years and Over
AL,310504,552339,259034,450818,1231572,1215966,641667
AK,52083,85640,42153,74257,198724,183159,50277
AZ,515910,828669,362642,601943,1804762,1523681,862573
AR,202070,343207,157204,264160,754420,727124,407205
CA,2704659,4499890,2159981,3853788,10604510,8819342,4114496
CO,358280,587154,261701,466194,1464939,1290094,511094
CT,211637,403658,196918,325110,916955,968967,478007
DE,59319,99496,47414,84464,230183,230528,121688
DC,36352,50439,25225,75569,193557,140043,70648
FL,1140516,1938695,925060,1607297,4782119,4746856,3187797
GA,740521,1250460,557860,919876,2846985,2389018,981024
HI,87207,134025,64011,124834,356237,331817,190067
ID,121746,201192,89702,147606,406247,375173,182150
IL,894368,1558919,725973,1311479,3596343,3239173,1575308
IN,443089,780199,361393,605863,1724528,1647881,813839
IA,201321,345409,165883,306398,750505,788485,444554
KS,202529,342134,155822,293114,728166,713663,366706
KY,284601,493536,229927,381394,1179637,1134283,565867
LA,310716,542341,254916,471275,1162463,1128771,540314
ME,71459,133656,69752,112682,331809,397911,199187
MD,371787,651923,316873,543470,1556225,1513754,679565

该 D3 文档可以在以下位置找到: http://bl.ocks.org/mbostock/3888852

最佳答案

当您说“D3 工具提示”时,我不确定您指的是什么,因为 d3 没有任何内置工具提示功能。也就是说,有一些很好的第三方插件可以在 d3 中提供工具提示。

d3-tip是一个非常适合您想要做的事情的方法。

您可以创建一个工具提示函数来显示每个弧线的人口数据,如下所示:

var tip = d3.tip()
.attr('class', 'd3-tip')
.html(function(d) { return d.data.population; })
.direction('s');

然后您可以在 svg 选择上调用该函数:

svg.call(tip);

最后,您可以在弧上使用鼠标事件监听器来显示和隐藏工具提示:

svg.selectAll(".arc")
.data(function(d) { return pie(d.ages); })
.enter().append("path")
.attr("class", "arc")
.attr("d", arc)
.style("fill", function(d) { return color(d.data.name); })
.on('mouseover', tip.show)
.on('mouseout', tip.hide);

这是一个PLUNK有一个工作示例。

您还可以查看 d3-tip 文档 here .

关于javascript - 将 D3 工具提示应用于 donut 倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768819/

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