Jonathan Star 2023-07-20 14:04 采纳率: 74.5%
浏览 15
已结题

react g6 怎么让节点在一个节点外面围成一个圈

react g6 怎么让节点在一个节点外面围成一个圈
文档:react g6 怎么让节点在一个节点外面围?..
链接:http://note.youdao.com/noteshare?id=4d2752990346d23193ef9766eb3feb89&sub=5AB99637377D405AB3330C8FB6FEB2E7

比如

这个代码不是正的圈


import React, { useEffect } from 'react';
import G6 from '@antv/g6';

const NodeGraph = () => {
  useEffect(() => {
    // 创建 G6 图实例
    const graph = new G6.Graph({
      container: 'graph-container', // 图容器的 ID
      width: 800,
      height: 600,
      layout: {
        type: 'circular', // 使用 circular 布局
        center: [400, 300], // 岗位节点的坐标
        radius: 200, // 节点围成的圆的半径
        startAngle: Math.PI, // 开始角度,这里设为 Math.PI,使节点环绕岗位节点
      },
      defaultNode: {
        size: [60, 30],
        style: {
          fill: '#5B8FF9',
          stroke: '#5B8FF9',
          radius: 5,
        },
      },
      defaultEdge: {
        style: {
          endArrow: true,
        },
      },
      modes: {
        default: ['drag-canvas', 'zoom-canvas','drag-node'], // 添加 'drag-node' 模式
      },
    });

    // 为岗位节点设置特殊样式
    graph.node(function (node) {
      if (node.type === 'position-node') {
        return {
          size: [80, 40],
          style: {
            fill: '#F6BD16',
            stroke: '#F6BD16',
            radius: 10,
          },
        };
      }
      return {};
    });
    const data = {
      nodes: [
        { id: 'ability1', label: '能力1' },
        { id: 'ability2', label: '能力2' },
        { id: 'ability3', label: '能力3' },
        { id: 'ability4', label: '能力4' },
        { id: 'ability5', label: '能力5' },
        // 添加更多的能力节点...
        { id: 'position', label: '岗位', type: 'position-node' }, // 岗位节点
      ],
      edges: [
        { source: 'position', target: 'ability1', label: '需要' },
        { source: 'position', target: 'ability2', label: '需要' },
        { source: 'position', target: 'ability3', label: '需要' },
        { source: 'position', target: 'ability4', label: '需要' },
        { source: 'position', target: 'ability5', label: '需要' },
        // 添加更多的连接边...
      ],
    };
    
    // 加载数据
    graph.data(data);
    graph.render();
  }, []);

  return <div id="graph-container" />;
};

export default NodeGraph;
  • 写回答

1条回答 默认 最新

  • Jonathan Star 2023-07-20 14:20
    关注
    import React, { useEffect } from 'react';
    import G6 from '@antv/g6';
    import Data from './data';
    
    const NodeGraph = () => {
      useEffect(() => {
        // 创建 G6 图实例
        const graph = new G6.Graph({
          container: 'graph-container', // 图容器的 ID
          width: 800,
          height: 600,
          layout: {
            type: 'customCircular', // 使用自定义的圆形布局
            center: [400, 300], // 岗位节点的坐标
            radius: 200, // 节点围成的圆的半径
            startAngle: Math.PI, // 开始角度,这里设为 Math.PI,使节点环绕岗位节点
          },
          defaultNode: {
            size: [60, 30],
            style: {
              fill: '#5B8FF9',
              stroke: '#5B8FF9',
              radius: 5,
            },
          },
          defaultEdge: {
            style: {
              endArrow: true,
            },
          },
          modes: {
            default: ['drag-canvas', 'zoom-canvas','drag-node'],
          },
        });
    
        // 为岗位节点设置特殊样式
        graph.node(function (node) {
          if (node.type === 'position-node') {
            return {
              size: [80, 40],
              style: {
                fill: '#F6BD16',
                stroke: '#F6BD16',
                radius: 10,
              },
            };
          }
          return {};
        });
    
        // 自定义布局:将能力节点围成一个圆形
        G6.registerLayout('customCircular', {
          /**
       * 初始化
       * @param {object} data 数据
       */
      init(data) {
        console.log("data init");
        console.log(data);
    
        const self = this;
        self.nodes = data.nodes;
        self.edges = data.edges;
        self.data = data;
      },
          execute() {
            console.log("this");
            console.log(this);
    
            let data=this.data
            console.log("data");
            console.log(data);
    
            const nodeCount = data.nodes.length - 1; // 减去1是因为要排除岗位节点
            const center = data.nodes.find(node => node.type === 'position-node');
            const radius = 200;
    
            data.nodes.forEach((node, i) => {
              if (node.type !== 'position-node') {
                const angle = (Math.PI * 2 * i) / nodeCount;
                const x = center.x + radius * Math.cos(angle);
                const y = center.y + radius * Math.sin(angle);
                node.x = x;
                node.y = y;
              }
            });
          },
        });
    
        let data=
        Data.data
        // 加载数据
        graph.data(data);
        graph.render();
      }, []);
    
      return <div id="graph-container" />;
    };
    
    export default NodeGraph;
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月30日
  • 已采纳回答 7月22日
  • 创建了问题 7月20日

悬赏问题

  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动