g6布局

358 阅读1分钟

图布局:

graphin的图分析一般用graphin-force布局,但其配置项官网及ts均未给出,查询源码其配置项有:

getDefaultCfg() {
  return {
    /** 前置布局,默认为 concentric */
    preset: {
      /** 特殊情况处理:前置布局为force,但是前置的数据也为空,则证明是初始化force布局,否则为正常前置force布局 */
      name: 'grid',
      options: {},
    },
    /** spring stiffness 弹簧劲度系数 * */
    stiffness: 200.0,
    /** repulsion 斥力,这里指代 库伦常量Ke */
    repulsion: 200.0 * 5,
    /** 向心力 */
    centripetalOptions: {
      leaf: 1.6,
      single: 1.6,
    },
    /** 速度的减震因子,其实就是阻尼系数 */
    damping: 0.9,
    /** 最小能量阈值,当粒子运动,有阻尼系数的存在,最终会将初始的能量消耗殆尽 */
    minEnergyThreshold: 0.1,
    /** 最大的速度 [0,1000] */
    maxSpeed: 1000,
    /** 最大迭代数 */
    MaxIterations: 10000, // 240, // 1000000次/(1000/60) = 60000s = 1min
    /** 是否开启动画 */
    animation: true,
  };
},

默认情况下,图布局的时间过长(5秒),需要调整其布局的参数:

const layout = {
  animation: false,
  type: 'graphin-force',
  repulsion: 200.0 * 120, //斥力
  enableWorker: true,
  MaxIterations: 5000, //最大迭代次数
  minDistanceThreshold: 4, //最小位移阈值
};

图缓存:

在图上每一个节点id确定了,节点也就唯一了

如只有当展开时右上角小圆点变色(相当于状态改变),

当重新设置数据时,如果也出现和其id相同的节点,那么会保留之前的状态。

解决方法:

1:每次数据更新时graph.clear();清除缓存

if (graphDataRef.current !== data) {
  setGraphData(data);
  setExpandNodes([]);
  graphDataRef.current = data;
  focusNodeRef.current = '';
  levelRef.current = 1;
  if (graphRef.current) {
    const { graph } = graphRef.current;
    graph.clear();
    graph.zoomTo(1);
  }
}

2:设置key值重新挂载组件:

<GraphinShow
  key={graphinKey}
  />