Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js中多行的动态工具提示_Javascript_Jquery_D3.js - Fatal编程技术网

Javascript d3.js中多行的动态工具提示

Javascript d3.js中多行的动态工具提示,javascript,jquery,d3.js,Javascript,Jquery,D3.js,我正在构建一个复杂的多行图形,包括缩放、刷牙、复选框等。我能够完成所有的工作,但却被工具提示卡住了。 我想要这样的东西 在特定x坐标处具有所有路径值的线 var vertical = d3.select("#main-graph") .append("div") .attr("class", "remove") .style("position", "absolute") .style("z-index", "19") .style("width", "1px") .style("height

我正在构建一个复杂的多行图形,包括缩放、刷牙、复选框等。我能够完成所有的工作,但却被工具提示卡住了。 我想要这样的东西

在特定x坐标处具有所有路径值的线

var vertical = d3.select("#main-graph")
.append("div")
.attr("class", "remove")
.style("position", "absolute")
.style("z-index", "19")
.style("width", "1px")
.style("height", "380px")
.style("top", "10px")
.style("bottom", "30px")
.style("left", "0px")
.style("background", "#fff");

d3.select("#main-graph")
.on("mousemove", function(){
mousex = d3.mouse(this);
mousex = mousex[0] + 220 ;
vertical.style("left", mousex + "px" )})
.on("mouseover", function(){  
mousex = d3.mouse(this);
mousex = mousex[0] +220 ;
vertical.style("left", mousex + "px")});
});
目前我有上面的代码来获取行。我现在如何获取悬停线上所有行的数据。谢谢你的帮助

使用函数从mousex值获取实际值

var xValue = xScale.invert(mousex);
获得xValue后,使用查找数组中该值的索引

要声明平分线函数,请执行以下操作:

var bisectDate = d3.bisector(function(d) { return d.date; }).left;
下面是如何使用它:

var index = bisectDate(data, xValue, 1);
一旦有了索引,就可以在索引、索引-1和索引+1值之间选择最接近的值,并从数据中获取所有的yValues和xValues

var finalIndex = getDesiredIndex(data, index); //Implement getDesiredIndex to get the left, right or center whatever index you think is perfect for your graph.
我的假设是,您的数据位于对象数组中。所以
data[finalIndex].yValue1,data[finalIndex].yValue2
。。。。。应该是你要找的

如果您需要我为您提供更具体的实现或工作示例,请添加一个JSFIDLE,我可以为您编辑它。

使用函数从mousex值获取实际值

var xValue = xScale.invert(mousex);
获得xValue后,使用查找数组中该值的索引

要声明平分线函数,请执行以下操作:

var bisectDate = d3.bisector(function(d) { return d.date; }).left;
下面是如何使用它:

var index = bisectDate(data, xValue, 1);
一旦有了索引,就可以在索引、索引-1和索引+1值之间选择最接近的值,并从数据中获取所有的yValues和xValues

var finalIndex = getDesiredIndex(data, index); //Implement getDesiredIndex to get the left, right or center whatever index you think is perfect for your graph.
我的假设是,您的数据位于对象数组中。所以
data[finalIndex].yValue1,data[finalIndex].yValue2
。。。。。应该是你要找的


如果您需要我为您提供更具体的实现或工作示例,请添加一个JSFIDLE,我可以为您进行编辑。

感谢yogesh的回复。因此,这里是一个基本版本的小提琴。我会尝试实现你的。如果你能让我看到这个例子,这将是有帮助的。我已经在mousemove上打印了控制台的所有内容。我将把它留给您来决定您想要向最终用户显示它的方式。在当前鼠标位置显示一行应该不难,然后在当前鼠标位置也应该能够轻松获得div。太好了:)谢谢yogesh!嗨,Yogesh,鼠标悬停在图形上时,是否可能在所有线节点上都有圆。你能帮我解决这个问题吗?这当然是可能的。一旦知道最接近的xvalue和yvalue。现在你已经知道了x值和y值。通过x值和y值,可以从比例中计算出x点和y点。获得x和y值后,在该点绘制圆。为了方便起见,你可以把它们放在一个单独的g块中。在画新的圆圈之前,一定要删除旧的圆圈。谢谢你的回复。因此,这里是一个基本版本的小提琴。我会尝试实现你的。如果你能让我看到这个例子,这将是有帮助的。我已经在mousemove上打印了控制台的所有内容。我将把它留给您来决定您想要向最终用户显示它的方式。在当前鼠标位置显示一行应该不难,然后在当前鼠标位置也应该能够轻松获得div。太好了:)谢谢yogesh!嗨,Yogesh,鼠标悬停在图形上时,是否可能在所有线节点上都有圆。你能帮我解决这个问题吗?这当然是可能的。一旦知道最接近的xvalue和yvalue。现在你已经知道了x值和y值。通过x值和y值,可以从比例中计算出x点和y点。获得x和y值后,在该点绘制圆。为了方便起见,你可以把它们放在一个单独的g块中。在绘制新圆之前,请始终删除或删除旧圆。