I have put together a D3 line chart并使用剪辑路径/剪辑添加阈值编码。我面临的唯一问题是我无法在此图表中添加工具提示。当我将鼠标悬停在图表中的任何位置时,我想要一个工具提示,并且图表上相应的y轴值显示在工具提示中。
我已使用此example by Mike Bostock添加了阈值编码。
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) { return _config.xScale(d.vtc); })
.y(function(d) { return _config.yScale(d.values); });
svg.append("clipPath")
.attr("id", "clip-above")
.append("rect")
.attr("width", _config.width)
.attr("height", _config.yScale(55));
svg.append("clipPath")
.attr("id", "clip-below")
.append("rect")
.attr("y", _config.yScale(55))
.attr("width", _config.width)
.attr("height", _config.height - _config.yScale(55));
svg.selectAll(".line")
.data(["above", "below"])
.enter().append("path")
.attr("class", function(d) { return "line " + d; })
.attr("clip-path", function(d) { return "url(#clip-" + d + ")"; })
.datum(data)
.attr("d", line);
我不知道如何为此特定图表添加工具提示,因为路径上有剪裁矩形,路径分解为上下段以产生颜色效果。
我们是否有统一的方法将工具提示添加到正常路径和此路径?如果是,我想知道一些我可以看到的来源/链接。
像this这样的东西,但不是那么复杂(在线上没有任何指标,只是工具提示)
答案 0 :(得分:0)
您可以为线添加mouseOver处理程序,并使用d3线性刻度的.invert函数将鼠标y位置转换回yAxis值。现在,您可以动态添加工具提示文本元素并将位置,值设置为
以下是更新后的Codepen link
注意:您仍然需要增加线的捕获区域。这可以通过在线上添加透明笔划来完成。
svg.selectAll(".line")
.data(["above", "below"])
.enter().append("path")
.attr("class", function(d) { return "line " + d; })
.attr("clip-path", function(d) { return "url(#clip-" + d + ")"; })
.datum(data)
.attr("d", line)
.on("mouseover", function() {
var mousePos = d3.mouse(this);
var yAxisValue = _config.yScale.invert(mousePos[1]);
svg.selectAll(".tooltip").data([mousePos])
.enter().append("text")
.classed("tooltip", true)
.attr("x", function(d) { return d[0]})
.attr("y", function(d) { return d[1]})
.text(yAxisValue);
})
.on("mouseout", function() {
svg.selectAll(".tooltip").data([]).exit().remove();
});