【问题标题】:Tooltip for Line Chart with Clip Path in D3D3 中带有剪辑路径的折线图的工具提示
【发布时间】:2015-07-07 03:01:18
【问题描述】:

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,但没有那么复杂(没有任何指示符,只有工具提示)

My CODEPEN LINK

【问题讨论】:

    标签: javascript d3.js charts data-visualization linechart


    【解决方案1】:

    您可以为线条添加 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();
       });
    

    【讨论】:

    • 太棒了,非常感谢,我会考虑增加捕获区域,您有什么建议吗?我应该在附加路径本身的同时添加具有更大笔触宽度的透明笔触吗?
    • 谢谢。我想要一个帮助。检查此示例highcharts.com/demo/line-basic 并告诉我当我在图表中的任意位置移动鼠标时如何执行此工具提示功能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多