我正在开发一个 D3.js 项目,以显示从 CSV 文件中提取的一些学生测试结果的直方图。除了原始考试成绩外,我还有一些关于 CSV 中每个学生的其他人口统计数据。我希望能够将鼠标悬停在直方图中的任何特定条上,并显示有关该条中代表的学生的一些汇总统计信息。
是否可以访问构成直方图条的数组中包含的记录的其他属性?如果是这样,有人知道我可以检查的例子吗?
我正在开发一个 D3.js 项目,以显示从 CSV 文件中提取的一些学生测试结果的直方图。除了原始考试成绩外,我还有一些关于 CSV 中每个学生的其他人口统计数据。我希望能够将鼠标悬停在直方图中的任何特定条上,并显示有关该条中代表的学生的一些汇总统计信息。
是否可以访问构成直方图条的数组中包含的记录的其他属性?如果是这样,有人知道我可以检查的例子吗?
您可以在鼠标悬停事件期间在条形图顶部显示工具提示。这个想法是让一个 div 浮动在 svg 区域的顶部。您可以在工具提示中显示各种信息。请参见此处的示例:
http://vida.io/documents/F3Ehr3qqeK28P22wn
这是显示/隐藏工具提示的代码块:
on("mouseover", function(d) {
var bar_width = parseInt($(this).attr("width"), 10);
var x = parseInt($(this).attr("x"), 10) + bar_width / 2 + 5;
var y = parseInt($(this).attr("y"), 10) - 20;
div.transition().duration(200).style("opacity", 1);
// include info you want to display here:
div.html(d[X_AXIS_COLUMN] + "<br/>" + Y_DATA_FORMAT(d[Y_AXIS_COLUMN])).style("left", x + "px").style("top", y + "px");
}).on("mouseout", function(d) {
div.transition().duration(500).style("opacity", 0);
})
使用直方图布局会抛出除用于创建直方图箱的标量之外的所有内容。
可能有更好的方法,但由于其他学生属性未附加到每个条形图,只需在原始学生数组中搜索分数在鼠标悬停箱中的学生:
.on('mouseover',function(d){
console.log('data bound to bars ' + d);
var selectedStudents = values.filter(function(record){
return d.x <= record.score && record.score < d.x + d.dx; });
console.log(selectedStudents.map(function(record){ return record.name; }));
});
http://bl.ocks.org/1wheel/6568151
selectedStudents 数组除了列出姓名外,还可用于生成其他汇总统计信息。