【问题标题】:How can I get the value at the corresponding place while mouseover in d3.js?如何在 d3.js 中鼠标悬停时获取相应位置的值?
【发布时间】:2013-04-07 10:50:50
【问题描述】:

我需要在使用 d3.js 将鼠标悬停在折线图/条形图上时在相应位置显示值

var toolTip = svg.selectAll("path")
.append("svg:title")
.text(getmouseoverdata(data)
);


function getmouseoverdata(d) {
    return d;
}

在这里,当鼠标悬停在图表中的任何位置时,我会获取数组中的所有数据。

但我想在相应的位置显示值。我怎样才能实现它?

【问题讨论】:

    标签: javascript backbone.js angularjs d3.js javascript-framework


    【解决方案1】:

    您可以像这样使用 d3js 鼠标事件处理程序

    var coordinates = [0, 0];
    coordinates = d3.mouse(this);
    
    var x = coordinates[0];
    var y = coordinates[1];
    

    它将为您提供当前的鼠标坐标。

    【讨论】:

    • 我试过这个,但得到以下错误 Uncaught TypeError: Cannot read property 'sourceEvent' of null (17:39:58:187 | error, javascript) at d3_eventSource (d3js.org/d3.v2.js:163:17) at d3。鼠标 (d3js.org/d3.v2.js:4102:37)
    • d3.mouse(this) 是一个 d3.v3.js 实现。我认为您需要将 d3.svg.mouse(this) 用于 d3.v2.js。
    【解决方案2】:

    如果您只想在将鼠标悬停在路径/矩形元素上时显示数据元素,您可以尝试在创建这些元素时直接将标题添加到这些元素上吗?

    例如:

    var data = [0, 1, 2, 3, 4, 5],
        size = 300;
    
    var canvas = d3.select("body")
                   .append("svg:svg")
                        .attr("width", size)
                        .attr("height", size);
    
    var pixels = size / data.length;
    
    canvas.selectAll("rect").data(data).enter().append("svg:rect")
          .attr("fill", "red")
          .attr("height", function(d){return d * pixels})
          .attr("width", pixels/2)
          .attr("x", function(d,i){return i * pixels})
          .attr("y", 0)
          .append("title")    //Adding the title element to the rectangles.
          .text(function(d){return d});
    

    如果您将鼠标悬停在矩形上,此代码应创建五个矩形,其数据元素显示在工具提示中。

    希望这会有所帮助。


    根据评论编辑:

    对于从下到上的图表,您可以像这样更改 y 属性:

    .attr("y", function(d){return size - d * pixels}) 
    

    此添加将导致条形图从图表的 maxHeight 和条形图大小之间的差值开始,从而有效地将自上而下的图表转变为自下而上的图表。

    【讨论】:

    • 感谢 chrtan。它的工作。图表从上到下显示。但我想要从下到上。帮帮我..
    • @Prince 我编辑了我的帖子,包括如何将自上而下的图表转换为自下而上的图表。
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2011-09-27
    • 2016-03-16
    相关资源
    最近更新 更多