我有一个名为graphData的数据集,有三个值:wavelengthmagnitudename.

let array = [
{name: "dataset 1", wavelength: 2, magnitude: 20}
{name: "dataset 1", wavelength: 3, magnitude: 22}
{name: "dataset 1", wavelength: 4, magnitude: 19}
{name: "dataset 2", wavelength: 2, magnitude: 14} //and so on...
]

我使用name值作为键,使用d3.group()对数据集进行了分组

let sortedGraphData = d3.group(graphData, d => d.fullId)

它应该返回如下的映射 struct :

{key: "dataset 1"
values: [
{wavelength: 2, magnitude: 20}
{wavelength: 3, magnitude: 22}
{wavelength: 4, magnitude: 19}
]}

{key: "dataset 2"
values: [
{wavelength: 2, magnitude: 14}
///and so on...
]}

但当我试图用

 let valueline = d3.line()
.x(function(d){return x(+d.wavelength)})
.y(function(d){return y(+d.magnitude)});


graph.append("path")
.data(sortedSessionGraphData)
.attr("class", "line")
.attr("d", valueline);

我得到以下错误:Error: <path> attribute d: Expected number, "MNaN,NaNLNaN,NaN".

我认为d3.line().x(function(d){return +d.wavelength})并没有像我希望的那样返回波长和幅度数据对数组,但我不确定如何在 map 中显示正确的数据.

如何在 map 中导航,并为 map 中包含的每个对象绘制新线?

推荐答案

由于d3.group的输出是一个javascript映射,因此需要将其转换为[key,value]个元组的数组,以实现可移植性:

let sortedGraphData = Array.from(d3.group(graphData, d => d.fullId))

通过此更改,sortedGraphData现在具有以下 struct :

[
  ["dataset 1", [{wavelength: 2, magnitude: 20}, ...]  ],
  ["dataset 2", [{wavelength: 2, magnitude: 14}, ...]  ],
]

使用sortedGraphDataappend将 for each 数据集创建一个路径,通过将值传递给line generator函数,可以计算SVG路径的d属性.由于值数组是每个数据集的第二个元素,因此可以使用索引1访问它:

.attr("d", d => valueline(d[1]))

Javascript相关问答推荐

为什么在react js中没有调用加载器函数?

从外部访问组件变量-Vueejs

如何在JavaScript中通过一次单击即可举办多个活动

主要内部的ExtJS多个子应用程序

*ngFor和@代表输入decorator 和选角闭合

如何判断属于多个元素的属性是否具有多个值之一

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

如何找出摆线表面上y与x相交的地方?

为什么ngModel不能在最后一个版本的Angular 17上工作?'

嵌套异步JavaScript(微任务和macrotask队列)

google docs boldText直到按行执行应用脚本错误

我们如何从一个行动中分派行动

屏幕右侧屏障上的产卵点""

简单的PayPal按钮集成导致404错误

Phaser3 preFX addGlow不支持zoom

react 路由如何使用从加载器返回的数据

我怎样才能得到一个数组的名字在另一个数组?

ComponentWillReceiveProps仍在React 18.2.0中工作

我的NavLink活动类在REACT-ROUTER-V6中出现问题