D3.js D3力';s d3.forceLink错误:未找到节点:<;此处的节点id>;

D3.js D3力';s d3.forceLink错误:未找到节点:<;此处的节点id>;,d3.js,d3-force-directed,D3.js,D3 Force Directed,我看到了这个相关的解决方案 但我在标题中得到了错误——“VM2128 d3-force-3d:2未捕获错误:未找到节点:高尔夫4_1” 显然(?)使用d3力的版本。也许连d3本身都没有 最小可复制代码: const graphData={ 节点:[{ 身份证:“爱丽丝” }, { id:“鲍勃” }, { id:“乔治” } ], 链接:[{ 资料来源:“爱丽丝”, 目标:“乔治” }, { 资料来源:“乔治”, 目标:“鲍勃” } ] }; const elem=document.getEl

我看到了这个相关的解决方案

但我在标题中得到了错误——“VM2128 d3-force-3d:2未捕获错误:未找到节点:高尔夫4_1”

显然(?)使用d3力的版本。也许连d3本身都没有

最小可复制代码:

const graphData={
节点:[{
身份证:“爱丽丝”
},
{
id:“鲍勃”
},
{
id:“乔治”
}
],
链接:[{
资料来源:“爱丽丝”,
目标:“乔治”
},
{
资料来源:“乔治”,
目标:“鲍勃”
}
]
};
const elem=document.getElementById('3d-graph');
常量图=ForceGraph3D()(元素)
.graphData(graphData);
函数setNodeId(节点){
返回node.id;
}
功能链接强度(链接){
返回(1/link.sourceLevel);
}
Graph.d3Force('link',d3.forceLink(graphData.links)
.id((d,i)=>setNodeId(d))
//.距离(200)
//.强度(d=>linkStrength(d))
);

根本问题是,您需要将整个
图形数据
传递给
d3.forceLink
函数,而不仅仅是
graphData.link
。但是,我认为以下解决方案更干净:

从for
Graph.d3Force()
的文档中:

用于控制d3模拟引擎的内力的Getter/setter。遵循与d3-force-3d的simulation.force相同的界面。默认情况下包括三种力:“链接”(基于forceLink)、“充电”(基于forceManyBody)和“中心”(基于forceCenter)

这意味着您可以仅使用字符串
'link'
调用函数,并获得类型为
d3-force-3d.forceLink
的对象,该对象将自动应用,从而自动访问右侧的
图形数据。然后,您可以像以前一样进行设置,但也可以稍后进行设置

const graphData={
节点:[{
身份证:“爱丽丝”
},
{
id:“鲍勃”
},
{
id:“乔治”
}
],
链接:[{
资料来源:“爱丽丝”,
目标:“乔治”
},
{
资料来源:“乔治”,
目标:“鲍勃”
}
]
};
const elem=document.getElementById('3d-graph');
常量图=ForceGraph3D()(元素)
.graphData(graphData);
函数setNodeId(节点){
返回node.id;
}
常量linkForce=Graph.d3Force('link')
.id((d,i)=>setNodeId(d))

请将您的代码转换为密码。还要让我们知道您使用的是哪个版本的d3,它是v2/3还是v6非常重要。
function setNodeId(node) {
  return node.id; }

Graph.d3Force('link', d3.forceLink(graphData.links)
  .id( (d,i) => setNodeId(d) )
  // .strength( d => linkStrength(d) )
);