【发布时间】:2015-08-06 05:19:50
【问题描述】:
我们有一些数据
University,Total,Females,Males,Year,Type
PortSaid,13817,6679,7138,2012,Public
PortSaid,14790,7527,7263,2013,Public
PortSaid,17295,8509,8786,2010,Public
6OctoberUniversity,12507,4297,8210,2012,Private
6OctoberUniversity,14608,5360,9248,2013,Private
我尝试创建像 Block 这样的饼图,并附有动态工具提示。 我手动创建一个 HTML 元素
<p>
<strong>University is </strong>
<span id="UniversityName"></span>
</p>
<p><span id="NumberStudents"></span> Students</p>
以及创建弧线和工具提示的代码
svg.selectAll("path")
.data(pie(data))
.enter().append("path")
.each(function(d) { d.outerRadius = outerRadius - 20; })
.attr("d", arc)
.on("mouseover", arcTween(outerRadius, 0))
.on("mouseout", arcTween(outerRadius - 20, 150))
.on("mouseover", function(d) {
var xPosition = 100;
var yPosition = 100;
d3.select("#tooltip")
.data(pie(data))
.style("left", xPosition + "px")
.style("top", yPosition + "px")
.select("#NumberStudents")
.text(function(d) { return d.value })
.select("#UniversityName")
.text(function(d) { return d.value });
//Show the tooltip
d3.select("#tooltip").classed("hidden", false);
})
.on("mouseout", function() {
//Hide the tooltip
d3.select("#tooltip").classed("hidden", true);
})
问题: Tooltip 总是返回 Total 列的第一个值,即 13817。如何根据鼠标悬停的弧线动态显示正确的值?
编辑:在代码 sn-p 和 HTML 工具提示模板中添加了第二个数据点 #UniversityName。
问题 2 正如@minikomi 指出的那样,正确的数据绑定将导致正确获取与每个弧相关的值。但是,似乎每条弧都附加了一个值,正确地是标记为 Total 的值。 然而,这会将每行的其余数据留在哪里,例如 Female、Male 或 Year?如何将它们也绑定到工具提示?
【问题讨论】:
-
那只是
d3.select("#tooltip").text(d.value);,不是吗? -
关于您的编辑:查看我的评论、我对答案的编辑和docs。这些文档非常全面,因此如果您想从块中学习,最好阅读每一行并检查它在另一个选项卡中对文档的作用。
-
@minikomi 我很难将文档与 javascript 的数据模型联系起来,它变得相当混乱。使用控制台猜测/评估任何给定点的数据几乎是无用的(尽管在文档中推荐!)感谢您的帮助,我会给他们一个全新的外观
标签: javascript html d3.js data-visualization