Я сейчас использую https://github.com/Caged/d3-tip в соответствии с примером http://bl.ocks.org/Caged/6476579. Соответствующий код выглядит так
let tip = d3.tip()
.attr('class', 'd3-tip')
.offset([0, 0])
.html(function(d) {
return "Tarif " + d.value;
});
svg.call(tip);
let heatmapChart = function(data) {
let cards = svg.selectAll(".hour")
.data(data, function(d) {
return d.day + ':' + d.hour;
});
cards.append("title");
cards.enter().append("rect")
.attr("x", function(d) {
return (d.hour - 1) * gridSize;
})
.attr("y", function(d) {
return (d.day - 1) * gridSize;
})
.attr("rx", 4)
.attr("ry", 4)
.attr("class", "hour bordered")
.attr("width", gridSize)
.attr("height", gridSize)
.on('mouseover', tip.show)
.on('mouseout', tip.hide)
.style("fill", function(d) {
return colors[d.value - 1];
});
cards.exit().remove();
};
heatmapChart(data);
Полное решение можно найти в скрипке: https://jsfiddle.net/8wtoqg6r/3/