当前位置: 首页 > article >正文

G6基本使用

Graph

Graph 是 G6 图表的载体,所有的 G6 节点实例操作以及事件,行为监听都在 Graph 实例上进行。

Graph 的生命周期为:初始化—>加载数据—>渲染—>更新—>销毁。

 G6.Graph的配置项参数

初始化 

Graph 的初始化通过 new 进行实例化,实例化时需要传入需要的参数。

const graph = new G6.Graph({
  container: '',
  width: 500,
  height: 500,
  modes: {
    default: ['drag-canvas'],
  },
  layout: {
    type: 'radial',
    unitRadius: 50,
    center: [500, 300],
  },
});

加载

 设置初始化数据:graph.data(data)   //graph 是Graph的实例

 渲染

1. render

根据提供的数据渲染视图: graph.render()

2.  read(data)

接收数据,并进行渲染,read 方法的功能相当于 data 和 render 方法的结合。

graph.read(data);

3. changeData(data)

更新数据源,根据新的数据重新渲染视图。

更新

1. addItem(type, model) 

新增元素(节点,边,或节点分组)。type可选

值为 'node''edge' 和 'group'

const model = {
  id: 'node',
  label: 'node',
  address: 'cq',
  x: 200,
  y: 150,
  style: {
    fill: 'blue',
  },
};

graph.addItem('node', model);

 2. add(type,model)

同 addItem(type, model)。

3. updateItem(item, model)

更新元素,包括更新数据、样式等。item是元素 ID 或元素实例

const model = {
  id: 'node',
  label: 'node',
  address: 'cq',
  x: 200,
  y: 150,
  style: {
    fill: 'blue',
  },
}
// 通过 ID 查询节点实例
const item = graph.findById('node');
graph.updateItem(item, model);

 4. update(item, model)

同 updateItem(item, model)。

5. removeItem(item)

删除元素,当 item 为 group ID 时候,则删除分组。

// 通过 ID 查询节点实例
const item = graph.findById('node');
graph.removeItem(item);

 6. remove(item)   

同 removeItem(item)。

7. refresh()

当源数据发生变更时,根据新数据刷新视图。

graph.refresh();

 8. refreshItem(item)

刷新指定元素。

// 通过 ID 查询节点实例
const item = graph.findById('node');
graph.refreshItem(item);

 实例 Item

Item 是 G6 中绘图元素实例,目前包含节点和边的实例。对于实例的变更建议在 graph 上进行。

1.更新 update(model)

model 属性

const model = {
  id: 'node',
  shape: 'rect',
  label: 'node',
  style: {
    fill: 'red',
  },
};

item.update(model);

 2.refresh()

刷新元素,包括更新元素位置,更新元素样式,清除之前的缓存。

一般在以下情况时,会刷新元素:

  • item model 被改变;
  • 边的位置发生改变,需要重新计算边
item.refresh();

3.销毁 destroy()

销毁元素,主要包括停止动画、删除 group 中的所有元素、清空配置项、设置 destroyed 为 true 等操作。 

item.destroy();

 节点 Node

 Node 继承自 Item。所以 Item 上面的方法在 Node 实例中都可以调用。

边 Edge

Edge 继承自 Item。所以 Item 的方法在 Edge 实例中都可以使用。

Layout

借助布局算法对图进行布局,共有9 种一般图的布局和 4 种树图的布局。默认为 random 布局。每种布局方法的配置项不尽相同

使用方法: 比如力导向布局:layout{ type: "force" }

layout: { // Object,可选,布局的方法及其配置项,默认为 random 布局。
    type: 'force',
    preventOverlap: true,
    nodeSize: 30,
    ... // 其他配置
  }

        一般图:

  • Random Layout:随机布局;
  • Force Layout:经典力导向布局:

    力导向布局:一个布局网络中,粒子与粒子之间具有引力和斥力,从初始的随机无序的布局不断演变,逐渐趋于平衡稳定的布局方式称之为力导向布局。适用于描述事物间关系,比如人物关系、计算机网络关系等。

  • Circular:环形布局;
  • Radial:辐射状布局;
  • MDS:高维数据降维算法布局;
  • Fruchterman:Fruchterman 布局,一种力导布局;
  • Dagre:层次布局。

        树图布局:

  • Dendrogram:树状布局(叶子节点布局对齐到同一层);
  • CompactBox:紧凑树布局;
  • Mindmap:脑图布局;
  • Intended:缩进布局。

Behavior

G6 中的复合交互,一般 Behavior 包含一个或多个事件的监听与处理以及一系列对图中元素的操作。

Behavior 默认包含 shouldBeginshouldUpdateshouldEnd 三个回调,代表是否开始行为,是否更新元素,是否进行结束行为,当返回值为 false 时阻止默认行为。

G6.registerBehavior('behaviorName', {
  getEvents() {
    return {
      'node:click': 'onNodeClick',
      'edge:click': 'onEdgeClick',
      mousemove: 'onMouseMove',
    };
  },
  onNodeClick(evt) {
    // TODO
  },
  onEdgeClick(evt) {
    // TODO
  },
  onMouseMove(evt) {
    // TODO
  },
});

const container = document.getElementById('container');
            const width = document.getElementById('container').scrollWidth;
            const height = document.getElementById('container').scrollHeight || 500;
            this.graph = new G6.Graph({
                container,
                modes: {
                    default: [ 'drag-canvas', 'drag-node', 'click-select', 'zoom-canvas' ]
                },
                layout: {
                    type: "radial",
                    linkDistance: 200, // 调整节点之间的距离
                    preventOverlap: true,
                    nodeStrength: -1000, // 节点之间的斥力强度
                    edgeStrength: 0.1, // 边的引力强度
                },
                width,
                height,
                // data,
                defaultNode: {
                    size: 50,
                    style: {
                        fill: '#a6d936',
                        stroke: '#a6d936',
                    },
                    labelCfg: {           // 标签配置属性
                        position: 'bottom'
                    }
                },
                defaultEdge: {
                    style: {
                        stroke: '#ddd',
                        lineWidth: 2,
                        endArrow: true
                    },
                },
            });
            
            this.graph.on('node:click', this.handleNodeClick);
            this.graph.render();


http://www.kler.cn/a/428982.html

相关文章:

  • 信息奥赛一本通 1168:大整数加法
  • 2025年1月17日(点亮三色LED)
  • 周末总结(2024/01/18)
  • mysql_real_connect的概念和使用案例
  • 令牌主动失效机制实现——Redis登录优化
  • 【RAG落地利器】向量数据库Qdrant使用教程
  • Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)
  • Springer Nature——Applied Intelligence 投稿指南
  • JVM学习《垃圾回收算法和垃圾回收器》
  • 知乎Java后台开发面试题及参考答案
  • Vue项目开发 如何实现父组件与子组件数据间的双向绑定?
  • 【innodb阅读笔记】之 索引组织表
  • 工业—使用Flink处理Kafka中的数据_ChangeRecord2
  • rpc-dubbo-多版本
  • 版本控制器git
  • 【六足机器人】01功能开发
  • 2024-12-08AI概念扫盲
  • 为什么Unity里的变体数和UWA工具测出来的不一样
  • 如何利用“一键生成ppt”减轻工作压力
  • 【jvm】为什么要有GC
  • R语言中的函数29:vector
  • Spring Event 监听与异步设置:深入解析与应用场景
  • win11 vs2022 python3.9环境下运行jupyterlab
  • 小程序-基于java+SpringBoot+Vue的智慧校园管理系统设计与实现
  • UE----Ios打包笔记
  • K8S的ingress介绍和安装ingress