首页 > 其他分享 >3d-force-graph力导向图,如何让具有相同属性的子节点在一起

3d-force-graph力导向图,如何让具有相同属性的子节点在一起

时间:2023-09-12 14:02:04浏览次数:36  
标签:force graph 节点 group id 3d

前言

3d-force-graph是一种基于力导向图的可视化工具,它可以帮助我们更直观地展示数据之间的关系。在使用3d-force-graph时,我们经常会遇到一种情况,即具有相同属性的子节点需要在一起展示,这时我们可以通过一些方法来实现这个目标。

方法一:使用颜色区分

我们可以通过为具有相同属性的子节点设置相同的颜色来让它们在一起展示。例如,我们可以将所有性别为男性的子节点设置为蓝色,将所有性别为女性的子节点设置为粉色。这样,在3d-force-graph中,所有性别为男性的子节点就会在一起展示,所有性别为女性的子节点也会在一起展示。

const data = {
  nodes: [
    { id: 'node1', group: 'male' },
    { id: 'node2', group: 'female' },
    { id: 'node3', group: 'male' },
    { id: 'node4', group: 'female' },
  ],
  links: [
    { source: 'node1', target: 'node2' },
    { source: 'node2', target: 'node3' },
    { source: 'node3', target: 'node4' },
  ],
};

const colorMap = {
  male: 0x0000ff,
  female: 0xff00ff,
};

const Graph = ForceGraph3D()
  .graphData(data)
  .nodeColor(node => colorMap[node.group]);

在上面的代码中,我们定义了一个colorMap对象,它将性别为男性的节点映射为蓝色,将性别为女性的节点映射为粉色。然后,我们在创建3d-force-graph实例时,通过nodeColor函数将节点的颜色设置为对应的颜色。

方法二:使用力学模型

我们可以通过调整3d-force-graph的力学模型来让具有相同属性的子节点在一起展示。例如,我们可以增加同类节点之间的斥力,减小异类节点之间的斥力,这样就可以让同类节点更容易聚集在一起。

const data = {
  nodes: [
    { id: 'node1', group: 'male' },
    { id: 'node2', group: 'female' },
    { id: 'node3', group: 'male' },
    { id: 'node4', group: 'female' },
  ],
  links: [
    { source: 'node1', target: 'node2' },
    { source: 'node2', target: 'node3' },
    { source: 'node3', target: 'node4' },
  ],
};

const Graph = ForceGraph3D()
  .graphData(data)
  .d3Force('charge', (node) => {
    const strength = node.group === 'male' ? -100 : -50;
    return strength;
  })
  .d3Force('link', d3.forceLink().id(d => d.id).distance(50))
  .d3Force('center', d3.forceCenter())
  .d3Force('collision', d3.forceCollide().radius(10));

在上面的代码中,我们通过d3Force函数设置了四个力学模型:charge、link、center和collision。其中,charge模型用于设置节点之间的斥力,我们通过判断节点的group属性来设置不同的斥力大小;link模型用于设置节点之间的连线,我们将连线的距离设置为50;center模型用于将整个图形居中显示;collision模型用于防止节点重叠。

总结

通过上面的两种方法,我们可以让具有相同属性的子节点在3d-force-graph中聚集在一起。这样,我们就可以更直观地展示数据之间的关系,更容易发现数据中的规律和趋势。

标签:force,graph,节点,group,id,3d
From: https://blog.51cto.com/u_15718546/7445129

相关文章

  • Codeforces Round 896 (Div. 2)
    CodeforcesRound896(Div.2)A.MakeItZero代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingi128=__int128;intn,m;voidsolve(){scanf("%d",&n);vector<int>a(n+1);for(inti......
  • 三维模型3DTile格式轻量化压缩模型变形浅析
    三维模型3DTile格式轻量化压缩模型变形浅析   在对三维模型进行轻量化压缩处理的过程中,常常会出现模型变形的现象。这种变形现象多数源于模型压缩过程中信息丢失或误差累积等因素。以下将对此现象进行详细分析。首先,我们需要了解三维模型轻量化压缩的主要方法:几何简化、......
  • 浅析三维模型3DTile格式轻量化处理常见问题与处理措施
    浅析三维模型3DTile格式轻量化处理常见问题与处理措施 三维模型3DTile格式的轻量化处理是大规模三维地理空间数据可视化的关键环节,但在实际操作过程中,往往会遇到一些问题。下面我们来看一下这些常见的问题以及对应的处理措施。变形过大:压缩过程中最常见的问题就是模型变形过......
  • CodeForces 542B Duck Hunt
    洛谷传送门CF传送门首先转化一下,让鸭子不动,猎人往右移动,就相当于开的相邻两枪距离\(>m\)。设\(f_{x,i}\)为仅考虑\(r\lex\)的鸭子,上一次在\(i\)开枪,能打到的最大鸭子个数。\(f_{x-1}\tof_x\)时,首先有\(f_{x,i}=f_{x-1,i}\)。我们先找到所有\(r=x\)......
  • Codeforces Round 896 (Div. 1)
    Preface不管怎么说,最后还是被我苟上橙名了(虽然刚好2100整,不多不少)感觉我在1900~2100之间卡了好久好久,反观我的队友都是打上紫名后随便两三场就打上橙了,狠狠地羞辱我这个铁混子由于暑假集训打的校内排名比较高,作为新队伍也拿到了今年的一场CCPC+一场ICPC的名额,虽然要自费出行但......
  • Codeforces Round 101 (Div. 2) C - E
    C.Queue(思维、排序、构造、*1800)题意:$n$个人排队,为他们构造一组身高,使得$x$的前面有$a_i$个人比他高。如果无法构造满足所有条件的身高序列,输出-1。思路:首先考虑,对于$a_i$较大的人,肯定尽可能地将其往队伍后面放,然后从后往前构造,因为只有$......
  • 汽车3D HMI图形引擎选择
    汽车3DHMI图形引擎选择向治洪在知乎工程师​关注他  2002年,电影《少数派报告》让观众深入了解未来。除了情节的核心道德困境之外,大多数人都对它的技术着迷。我们看到了自动驾驶汽车、个性化广告和用户可以无缝交互的3D计算机界面。令人惊讶的是,虽......
  • 【题解】Educational Codeforces Round 142(CF1792)
    没有手速,再加上被E卡了,废掉了。A.GamingForces题目描述:Monocarp正在玩电脑游戏。他打算杀死\(n\)个怪兽,第\(i\)个的血量为\(h_i\)。Monocarp的角色有两个魔法咒语如下,都可以以任意顺序用任意次(可以不用),每次使用相当于一次操作。选择两个怪兽并各扣一滴血。选择......
  • 三维模型3DTILE格式轻量化压缩主要技术方法浅析
    三维模型3DTILE格式轻量化压缩主要技术方法浅析 三维模型3DTILE格式轻量化压缩主要技术方法浅析随着三维地理空间数据的应用日益广泛,为了更快速地传输和存储这些大规模数据,3DTile格式的轻量化压缩显得尤为重要。本文将浅析关于三维模型3DTile格式轻量化压缩的主要技术方法。......
  • 三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍
    三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍   三维模型3DTile格式的轻量化处理旨在减少模型的存储空间和提高渲染性能。以下是一些推荐的工具软件,可以用于实现这个目的:MeshLab:MeshLab是一个开源的三维模型处理软件,它支持多种格式的导入和导出,包括3DTiles。通......