D3.js d3Force';s(d3-force-3d';s)forceLink.links()怎么办?
我希望forceLink的#功能能够“初始化”链接子集的力;但是,此函数显然不会将链接子集传递给后续的#distance函数(在下面的代码中),后者会接收所有链接 问题:如何使用#links函数[或任何库函数]来提供链接子集,然后对其应用#distance之类的函数 为了相关的清晰性,也许有助于了解links函数除了在移除/添加图形节点后重新应用力(可能使用函数)之外,还可以做些什么D3.js d3Force';s(d3-force-3d';s)forceLink.links()怎么办?,d3.js,D3.js,我希望forceLink的#功能能够“初始化”链接子集的力;但是,此函数显然不会将链接子集传递给后续的#distance函数(在下面的代码中),后者会接收所有链接 问题:如何使用#links函数[或任何库函数]来提供链接子集,然后对其应用#distance之类的函数 为了相关的清晰性,也许有助于了解links函数除了在移除/添加图形节点后重新应用力(可能使用函数)之外,还可以做些什么 正文{页边距:0;} 常量图形数据={ 节点:[ {id:“爱丽丝”}, {id:“Bob”}, {id:“乔
正文{页边距:0;}
常量图形数据={
节点:[
{id:“爱丽丝”},
{id:“Bob”},
{id:“乔治”}
],
链接:[
{来源:“爱丽丝”,目标:“乔治”,来源级别:6},
{来源:“乔治”,目标:“鲍勃”,来源级别:7}
]
};
const elem=document.getElementById('3d-graph');
常量图=ForceGraph3D()(元素)
.graphData(graphData);
常量graphLinksSubset=graphData.links
.filter(link=>link.sourceLevel==6);
常量graphNodesSubset=graphLinksSubset
.map(链接=>{
返回[
graphData.nodes
.find(node=>node.id==link.source),
graphData.nodes
.find(node=>node.id==link.target)
]})平坦();
常量图形数据子集={
节点:[…图形节点子集],
链接:[……GraphlinkSubset]
}
图.d3Force('link')
.links(图形数据子集)
.距离(链接=>{
返回200;
//return link.sourceLevel==6?
// 50 : 200
} )
.id(node=>node.id)
//.强度(d=>linkStrength(d))
//同样的结果--
//图d3Force('link',d3.forceLink(图数据子集)
//.links(图形数据子集)
//.距离(链接=>{
//返回200;
////返回link.sourceLevel==5?
// // 50 : 200
// } )
//.id(node=>node.id)
////强度(d=>linkStrength(d))
// );
您的摘要和问题似乎有所不同。您是否寻求对功能的解释或问题的解决方案?主要是问题的解决方案;但如果您/某人可以帮助阐述#links函数的实用性,那就太好了。
<html>
<head>
<style> body { margin: 0; } </style>
<!-- <script src="https://unpkg.com/three"></script> -->
<script src="https://unpkg.com/d3-force-3d"></script>
<script src="https://unpkg.com/3d-force-graph"></script>
</head>
<body>
<div id="3d-graph"></div>
<script>
const graphData = {
nodes: [
{id:"Alice"},
{id:"Bob"},
{id:"George"}
],
links: [
{source: "Alice", target:"George", sourceLevel: 6},
{source: "George", target:"Bob", sourceLevel: 7}
]
};
const elem = document.getElementById('3d-graph');
const Graph = ForceGraph3D()(elem)
.graphData(graphData);
const graphLinksSubset = graphData.links
.filter( link => link.sourceLevel === 6 );
const graphNodesSubset = graphLinksSubset
.map( link => {
return [
graphData.nodes
.find( node => node.id === link.source ),
graphData.nodes
.find( node => node.id === link.target )
] }).flat();
const graphDataSubset = {
nodes: [...graphNodesSubset],
links: [...graphLinksSubset]
}
Graph.d3Force('link')
.links(graphDataSubset)
.distance( link=> {
return 200;
// return link.sourceLevel === 6 ?
// 50 : 200
} )
.id( node => node.id )
// .strength( d => linkStrength(d) )
// SAME RESULT HERE--
// Graph.d3Force('link', d3.forceLink(graphDataSubset)
// .links(graphDataSubset)
// .distance( link=> {
// return 200;
// // return link.sourceLevel === 5 ?
// // 50 : 200
// } )
// .id( node => node.id )
// // .strength( d => linkStrength(d) )
// );
</script>
</body>
</html>