降序数组上的 d3.bisector

2023-11-29

我正在创建一个简单的 D3 折线图,但在使用以下命令创建工具提示时遇到问题d3.bisector()功能。我正在寻找它去 Y 和 X 轴的每个值。 bisector 函数可以很好地为我提供与鼠标坐标相对应的 xData 值,但我不断得到 yData 的一些非常奇怪的结果。我怀疑问题在于 yData 数组的降序性质。有没有办法调整bisector()处理降序数组的函数?我正在寻找一种适用于任何数据集的解决方案。

//define the domain and range for the chart
var xScale =  d3.scaleLinear().domain([0,10]).range([0, width]);
var yScale =  d3.scaleLinear().domain([0,10]).range([height,0]);

//data for the line
var xData = [0,1,2,3,4,5,6,7,8,9,10];
var yData = [10,9,8,7,6,5,4,3,2,1,0];

//set up the  bisector function
var bisectData= d3.bisector(function(d){return d}).left;

 // get the x and y position of the cursor and put it into the Xscale/yScale function to get the correct X and Y values from the corresponding coordinates
var x0 = xScale.invert(d3.mouse(this)[0])
var y0 = yScale.invert(d3.mouse(this)[1])

//round the values to the nearest integer to match the original data
var x0 = Math.round(x0);
var y0 = Math.round(y0);

//get the correct index value of the relevant data array
var xIndex= bisectData(xData,x0,1);
//get the actual value from the original array using the correct index

//this work fine 
var x1 = xData[xIndex];

//this does not
var yIndex= bisectData(yData,y0,1);
var y1 = yData[yIndex];

有关的文档d3.bisector()你涵盖了吗(强调我的):

使用比较器而不是访问器如果您希望值以不同于自然顺序的顺序排序,例如按降序而不是升序.

该方法的签名允许您传入一个比较器函数,该函数使用作为第二个参数传递的搜索值来调用。因此,您可以按降序排列数组的平分线,如下所示:

d3.bisector((d, x) => x - d).left
//              ^--- Search value

看看下面的工作演示:

const yData = [10,9,8,7,6,5,4,3,2,1,0];

const descBisector = d3.bisector((d, x) => x - d).left;
const yIndex = descBisector(yData, 2);

console.log(yIndex);
<script src="https://d3js.org/d3.v5.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

降序数组上的 d3.bisector 的相关文章

随机推荐

  • 无法将 Boost.Thread 1.46.1 与 MinGW 4.5.2 链接

    我使用以下方法构建了 boost bjam toolset gcc with thread stage 每当我尝试实际使用 Boost Thread 时 尽管我链接了它 但我都会收到未定义的引用 其他 Boost 库 例如 Regex 或
  • 将字符串转换为日历。最简单的方法是什么? [复制]

    这个问题在这里已经有答案了 将格式化字符串转换为日历的最简单方法是什么 例如日历中的 dd MM yyyy DateFormat df new SimpleDateFormat dd MM yyyy Calendar cal Calenda
  • 将 ASP.NET 部署到 Windows Azure 云,应用程序在云上运行时出现错误

    我正在尝试在 Windows Azure 云中部署 ASP NET 应用程序 我正在使用 Google API 进行应用程序中的调用之一 当我这样做时 我收到以下错误 System UnauthorizedAccessException 对
  • CodeIgniter-单击每个链接或重新加载页面时检查会话变量是否已设置

    我有一个名为 admin 的控制器 如果设置了会话变量 则可以使用控制器中的所有功能 那么当单击页面中的每个链接或重新加载页面时 检查会话是否设置的最佳方法是什么 例如 如果我在多个选项卡中打开我的管理主页 浏览器并从第一个选项卡注销 然后
  • Python PPTX条形图负值

    我使用以下代码为 python pptx 生成的条形图指定条形的特定颜色 chart series 0 format fill solid chart series 0 format fill fore color rgb RGBColor
  • 使用 JOLT 转换重命名嵌套数组中的字段

    我想使用 JOLT 转换库重命名嵌套在另一个数组中的数组中的字段 要重命名的一个字段是数组中的顶级字段 要重命名的两个字段位于嵌套数组内 我尝试过使用通配符 但它们没有给我预期的输出 我使用的是 JOLT 0 0 22 版本 输入 JSON
  • 使用 QueryByAttribute 无法检索空值

    我是 CRM 开发新手 除了 CRM 2011 中的现有值之外 我还想从我的 C 应用程序更新自定义字段值 如果该字段有一些值 那么它工作正常 但如果它为空 那么我收到 给定的键不存在于字典中 错误 下面的代码是我想要实现的目标 IOrga
  • 如何使用 bash 删除并替换终端中的最后一行?

    我想在 bash 中实现一个显示经过秒数的进度条 为此 我需要擦除屏幕上显示的最后一行 命令 clear 会擦除所有屏幕 但我只需要擦除进度条的行并将其替换为新信息 最终结果应如下所示 Elapsed time 5 seconds 然后 1
  • 如何诊断 MS 访问崩溃

    我们有一个用 Access 编写的自定义程序 其中有奇怪的崩溃 我们添加了错误处理 记录并通过电子邮件发送我们自己的代码内部发生的任何崩溃 这使我们能够修复生成的大多数错误 但有时崩溃发生在我们的代码外部 我们发现 2013 年新出现的一个
  • Java 中的谓词

    我正在浏览使用的代码Predicate在爪哇 我从来没有用过Predicate 有人可以指导我任何教程或概念解释吗Predicate以及它在Java中的实现 我假设你正在谈论com google common base Predicate
  • 为什么这个 OpenMP 程序比单线程慢?

    请看一下这段代码 单线程程序 http pastebin com KAx4RmSJ 编译为 g lrt O2 main cpp o nnlv2 使用 openMP 的多线程 http pastebin com fbe4gZSn编译为 g l
  • Android:如何从 JAR 文件动态加载类?

    我正在尝试在 Android 平台上运行时动态加载一个类 该类包含在单独的库 JAR 文件中 但与 APK 一起打包 根据 SDK 中的新库机制 使用 Class forname 方法时 我收到类未找到异常 我已经看到了一些关于 DexCl
  • PHP 使用 imagegrabscreen

    我如何使用 imagegrabscreen 获取特定网站的缩略图和全尺寸图像 我在想我可以有一个array我将想要的 uri 输入到其中 但我对如何设置我需要抓取的图像的 wxh 有点困惑 我还认为我需要一个thumbnail class
  • 如何按顺序获取最后 5 个文档?

    说我有1 2 3 4 5 6 7 8 9 10在数据库中 基于timestamp order 我想要得到6 7 8 9 10按顺序 MessageModel find sort timestamp 1 limit 5 exec then m
  • 如何将链表写入文件

    我是一名新程序员 在将链接列表写入文本文件时遇到一些麻烦 这是我的代码 typedef struct N int code char name MAX1 int items float price struct N next node t
  • 在 JavaScript 中解析带有逗号小数点分隔符的数字

    我用这个函数来检查一个值是否是一个数字 function isNumber n return isNaN parseFloat n isFinite n 我的计划需要符合德国价值观 我们使用逗号而不是点作为小数点分隔符 因此该函数不起作用
  • 具有空对象的归约函数不起作用

    我正在尝试从表单元素创建对象 由于某种原因 它抛出了错误 let allInputs formData allInputs pop Remove submit button return allInputs reduce userObj d
  • 方法 string.Replace( ) 不起作用[重复]

    这个问题在这里已经有答案了 public string Generate RandomNumberGenerator rdng new RNGCryptoServiceProvider byte bytes new byte 40 rdng
  • 如何使用 Meteor.js 显示所有登录用户的列表

    几天来我一直在尝试获取 Meteor 聊天应用程序中登录用户的列表 我尝试了很多不同的事情 我设法在用户配置文件对象上添加登录标志 服务器端 Accounts onCreateUser function options user if op
  • 降序数组上的 d3.bisector

    我正在创建一个简单的 D3 折线图 但在使用以下命令创建工具提示时遇到问题d3 bisector 功能 我正在寻找它去 Y 和 X 轴的每个值 bisector 函数可以很好地为我提供与鼠标坐标相对应的 xData 值 但我不断得到 yDa