Javascript d3js中svg热图/颜色比例的工具提示
我正在用AngularJS调整这个梯度。下面是我正在使用的数据集的一部分:Javascript d3js中svg热图/颜色比例的工具提示,javascript,angularjs,d3.js,svg,Javascript,Angularjs,D3.js,Svg,我正在用AngularJS调整这个梯度。下面是我正在使用的数据集的一部分: var stays=[ { day:2, hour:1, time_spent:127 }, { day:4,
var stays=[
{
day:2,
hour:1,
time_spent:127
},
{
day:4,
hour:1,
time_spent:141
},
{
day:1,
hour:1,
time_spent:134
},
{
day:5,
hour:1,
time_spent:174
},
{
day:3,
hour:1,
time_spent:131
},
{
day:6,
hour:1,
time_spent:333
}];
问题是,我想为热图中创建的每个正方形构造一个工具提示。工具提示如下:
var heatMap = svg.selectAll(".hour")
.data(stays)
.enter().append("rect")
.attr("x", function(d) { return (d.hour - 1) * gridSize; })
.attr("y", function(d) { return (d.day - 1) * gridSize; })
.attr("class", "hour bordered")
.attr("width", gridSize)
.attr("height", gridSize)
.style("stroke", "white")
.style("stroke-opacity", 0.6)
.style("stroke-width", 0.8)
.style("fill", function(d) { return colorScale(d.time_spent); })
.on("mouseover", function(d, i) {
// Construct tooltip
var tooltip_html = '';
tooltip_html += '<div class="header"><strong>' + 'Stays' + ' </strong></div><br>';
// Add info to the tooltip
angular.forEach(stays, function (d) {
tooltip_html += '<div><span><strong>' + makeid() + '</strong></span>';
tooltip_html += '<span>' + ' ' + d.time_spent + '</span></div>';
console.log(d.time_spent);
}, days);
// Set tooltip width
tooltip.html(tooltip_html)
.style("width", 300 + "px")
.style("left", (d3.event.layerX+10) + "px")
.style("top", (d3.event.layerY+10) + "px");
// Tooltip transition and more styling
tooltip.style('display', 'block')
.transition()
.ease('ease-in')
.duration(100)
.style("opacity", .9);
})
.on("mouseout", function(d) {
tooltip.transition()
.duration(100)
.ease('ease-in')
.style('opacity', 0);
});
var heatMap=svg.selectAll(“.hour”)
.数据(停留)
.enter().append(“rect”)
.attr(“x”,函数(d){return(d.hour-1)*gridSize;})
.attr(“y”,函数(d){return(d.day-1)*gridSize;})
.attr(“类”、“小时边界”)
.attr(“宽度”,网格大小)
.attr(“高度”,网格大小)
.style(“笔划”、“白色”)
.style(“笔划不透明度”,0.6)
.样式(“笔划宽度”,0.8)
.style(“fill”,函数(d){return colorScale(d.time_-spend);})
.on(“鼠标悬停”,功能(d,i){
//构造工具提示
var工具提示\u html='';
工具提示html+=''+'保持'+'
';
//将信息添加到工具提示中
角度。forEach(撑杆,功能(d){
工具提示(html++=''+makeid()++'';
工具提示html+=''+''+d.花费的时间+'';
console.log(d.花费的时间);
},天);
//设置工具提示宽度
html(tooltip\uhtml)
.样式(“宽度”,300+“像素”)
.style(“左”(d3.event.layerX+10)+“px”)
.style(“顶部”(d3.event.layerY+10)+“px”);
//工具提示转换和更多样式
tooltip.style('显示','块')
.transition()
.ease('ease-in')
.持续时间(100)
.样式(“不透明度”,.9);
})
.on(“mouseout”),函数(d){
tooltip.transition()
.持续时间(100)
.ease('ease-in')
.style('opacity',0);
});
这里的想法是,对于我访问的每个方块,工具提示将显示关联到该方块的标签(我仍然没有使用标签,但它们将是我显示的数据集的一部分,我使用
makeid()
函数创建随机名称),以及关联的花费的时间\u
数据的细分。我现在用的是写完整的数字列表,而不是与每个正方形相关的数字。思想?谢谢。< /P> < P>而不是为每个单元建立TooToIP HTML,请考虑将数据附加到每个单元ReCt。创建单个数据div,并在光标移动到单元格上时填充它
我将此添加到热图渐变示例中。试试看
[代码>var>var事故={{{{{天:2,小时:2,小时:1,计数:141},{{天:1,小时:1,计数:1,计数:1,计数:134},{{{天:1,小时:2,小时:2,小时:1,小时:1,小时:1,计数:1,计数:127},{天:4,天:4,小时:2,小时:1,小时:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:1,计数:134},{{{{{{{{{天:1,1,1,1,1,1,1,1,1,1,1:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,小时:2,计数:92},{天:6,小时:2,计数:257},{天:4,小时:3,计数:3,计数:73},{{天:4,小时:3,计数:73},{天:1,小时:1,小时:3,计数:3,计数:73},{{天:1,小时:1,小时:3,小时:3,小时:3,小时:3,计数:2,小时:7,计数:3,计数:73},{{{{天:1,天:1,1,小时:1,小时:1,小时:3,3,计数:3,计数:3,计数:3,计数:3,计数:3,计数:7,计数:73},{,{,{,{,{,{{,{{{{{{{{{{{{},},},},{天:1,天:1,天:1,天:1,1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,83},{天:3,小时:4,计数:45},{天:6,小时:4,计数:180},{天:4,小时:5,计数:5,计数:57},{{天:4,小时:5,计数:57},{天:1,小时:5,计数:5,计数:57},{{天:1,小时:5,小时:5,小时:5,小时:5,小时:5,小时:5,小时:5,计数:5,计数:5,计数:5,计数:5,计数:57},{,{,{天:1:1,天:1,天:1,天:1,1,1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:5,5,5,小时:5,5,计数:5,计数:5,计数:5,计数:5,计数:73},计数:73},},{,{,{{,{,{,{,{{{,{,{,{,{{{{,{{{{{{{{{{{{{天:3,小时:6,计数:117},{天:6,小时:6,计数:148},{天:4,小时:7,计数:284},{天:4,小时:7,计数:284},{{天:1,小时:7,计数:284},{天:1,天:1,小时:1,小时:7,小时:7,计数:7,计数:7,小时:7,小时:7,计数:284},{,{天:1,天:1,小时:1,小时:7,小时:7,计数:7,计数:7,计数:7,计数:7,计数:284},{,{,{,{,{,{,{,{天:1,天:1,天:1,1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,7,小时:7,7,数:7,计数:7,计数:7,计数:7,时间:8,计数:609},{天:3,小时:8,计数:846},{天:6,小时:8,计数:208}{天:4,小时:9,计数:286},{天:4,小时:9,计数:286},{天:4,小时:9,计数:1214},{{天:1,天:1,小时:1,小时:1,小时:1,小时:9,计数:9,计数:1214},{天:1,天:7,小时:4,小时:9,数:9,计数:9,计数:9,计数:9,计数:1214},{,{{{{{{{{天:1,天:1,天:1,天:1,1,1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:1,小时:9,9,9,计数:9,计数:9,计数:9,计数:9,计数:9,计数:1214},},{{{{,{{{,{{{{{{{{{{{{{{{{小时:10,计数:655},{天:3,小时:10,计数:684},{天:2,小时:11,计数:591},{{天:2,小时:11,计数:591},{{天:2,小时:11,计数:591},{{天:4,小时:4,小时:11,小时:11,小时:11,计数:11,计数:10,计数:10,计数:482},{,{天:2,天:2,小时:2,小时:2,小时:11,计数:11,计数:11,计数:11,计数:11,计数:591,计数:591},{,{,{,{{{{{{天:6,天:6,天:6,天:6:6,天:6,天:6,6,6,6,天:6,小时:6,小时:6,小时:6,小时:6,小时:6,小时:6,小时:6,小时:6,小时:6,小时:6,11,11,11,11,计数:时间:1,小时:12,计数:639},{天:5,小时:12,计数:736},{{天:7,小时:12,小时:3,小时:3,小时:3,小时:3,小时:3,计数:402},{{天:7,小时:12,计数:12,计数:402,计数:{,{天:3,小时:3,小时:3,小时:13,计数:13,计数:749},{{天:6,天:6,小时:3,小时:3,小时:3,小时:12,计数:12,计数:12,计数:402,计数:402},{,{,{,{,{,{,{,{,{{天:2,天:2,天:2,天:2,小时:2,小时:2,小时:2,小时:2,小时:2,小时:2,小时:2,小时:13,小时:13,计数:13,计数:13,计数:13,计数:13,计数:13,计数:8},},{{{{{,{{{4,小时:14,计数:847},{天:1,小时:14,计数:752},{天:6,小时:14,计数:983},{天:6,小时:14,计数:983},{天:6,小时:14,计数:983},{天:7,天:7,小时:7,小时:14,小时:14,小时:14,小时:14,小时:14,小时:14,小时:14,计数:14,计数:14,小时:14,小时:14,计数:14,计数:636},{,{{{{{{{{{天:7,天:7,天:7,天:7,小时:7,小时:7,小时:7,小时:7,小时:7,小时:14,小时:14,小时:14,小时:14,小时:14,小时:14,小时:14,计数:14,计数:14,计数:14,计数:14,计数:14,计数:14,计数:14,计数:14,计数:14,计数:14,计数:数数数数数数数时间:2,小时:16,计数:1101},{天:4,小时:16,计数:1158},{day:1,hour:16,count:1029},{day:5,hour:16,count:1364},{day:3,hour:16,count:1068},{day:6,hour:16,count:736},{day:2,hour:17,count:1303},{day:4,hour:17,count:1426},{day:1,hour:17,count 1270},{day:17,hour:17,count