使用鼠标悬停时嵌套数据上的一个d3行

3gtaxfhh  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(149)

我已经成功地创建了我想要的线条和情节,但不幸的是,我没有创建一个简单的悬停在线条上。
这是主代码:

var groupclusters = d3.nest()
            .key(function(d) { return d.clustindex; })
            .entries(expsdata);

var svg = d3.select("#container3")
                .selectAll("svg")
                .data(groupclusters)
                .enter()
                .append("svg")
                .attr("width", width + margin.left + margin.right)
                .attr("height", height + margin.top + margin.bottom)
                .append("g")
                .attr("transform","translate(" + margin.left + "," + margin.top + ")");

             svg.append("path")
                .attr("fill", "none")
                .attr("stroke", '#a65628')
                .attr("stroke-width", 1)
                .attr("class", "line")
                .attr("d", function(d){
                    return d3.line()
                  .x(function(d) { return x(d.mtbname); })
                  .y(function(d) { return y(+d.clustcenters); })(d.values);
                });

字符串
上面的代码创建了下面的图:
x1c 0d1x的数据
当我将鼠标悬停在这条线上以获取一个值时,我将如何实现它?
我在下面尝试了这个,但是在悬停时我得到了“undefined”,这意味着它找不到数据/值!但是数据在那里(groupclusters)!

svg.append("path")
                .attr("fill", "none")
                .attr("stroke", '#a65628')
                .attr("stroke-width", 1)
                .attr("class", "line")
                .attr("d", function(d){
                    return d3.line()
                  .x(function(d) { return x(d.mtbname); })
                  .y(function(d) { return y(+d.clustcenters); })(d.values);
                }).on('mouseover', function(d){
                               tooltip1.transition().duration(10)
                                       .style("opacity",0.8)
                                       .style("left",(d3.event.pageX+20)+"px")
                                       .style("top", (d3.event.pageY-35)+"px");
                               tooltip1.html("<p>"+d.mtbname+"</p>");})
                  .on('mouseout', function(d){
                             tooltip1.transition().duration(100).style("opacity",0);});;

编辑

我使用的是d3 5.7.0。这些是我的量表:

var x = d3.scaleBand()
                .domain(mtbsnameslist)
                .range([ 0, width ]);

var y = d3.scaleLinear()
                .domain([0, d3.max(expsdata, function(d) { return +d.clustcenters; })])
                .range([ height, 0 ]);

jobtbby3

jobtbby31#

感谢Gerardo Furtado,我找到了答案!将鼠标悬停改为:

.on('mouseover', function(d){
                    x.invert = function(x) {
                                    var domain = this.domain();
                                    var range = this.range();
                                    var scale = d3.scaleQuantize().domain(range).range(domain);
                                    return scale(x);
                                    };
                    var coordinates= d3.mouse(this);
                    var xcoo = coordinates[0];
                    
                               tooltip1.transition().duration(10)
                                       .style("opacity",0.8)
                                       .style("left",(d3.event.pageX+20)+"px")
                                       .style("top", (d3.event.pageY-35)+"px");
                               tooltip1.html("<p>"+x.invert(xcoo)+"</p>");})
.on('mouseout', function(d){
         tooltip1.transition().duration(100).style("opacity",0);});

字符串

相关问题