G6初识

简介: 简单介绍G6的用法,适合新手快速入门

G6是一个简单、易用、完备的图可视化引擎,能帮助开发者搭建属于自己的图,图分析应用或是图编辑器应用(来自官网)。

G6不依赖其他的框架,只需要开发者使用js开发,可以轻松让初学者接触到可视化领域,完成较为高质量可视化项目。在这里我简单介绍G6的用法,适合新手快速入门。

1.安装和引用

1)安装

 npm install --save @antv/g6

2)引入

import G6 from '@antv/g6'

2.创建第一个图

1)创建一个div作为渲染区域(可以为div设置样式,让它全屏展示,方便后续调整)
image.png
2)编写js部分代码

  • 首先,实例化G6.graph,并在里面传入你需要的配置
    image.png
  • 然后,设置渲染的json数据
    const data = {
         
    // 点集
    nodes: [{
         
      id: '1', // String,该节点存在则必须,节点的唯一标识
      label: 'node1',
    },{
         
      id: '2', // String,该节点存在则必须,节点的唯一标识
      label: 'node2',
    },{
         
    id: '3', // String,该节点存在则必须,节点的唯一标识
    label: 'node3',
    },{
         
    id: '4', // String,该节点存在则必须,节点的唯一标识
    label: 'node4',
    },{
         
    id: '5', // String,该节点存在则必须,节点的唯一标识
    label: 'node5',
    }],
    // 边集
    edges: [{
         
      source: '1', // String,必须,起始点 id
      target: '2',  // String,必须,目标点 id
    },
    {
         
      source: '2', // String,必须,起始点 id
      target: '3',  // String,必须,目标点 id
    },{
         
      source: '2', // String,必须,起始点 id
      target: '4',  // String,必须,目标点 id
    },{
         
      source: '3', // String,必须,起始点 id
      target: '5', // String,必须,目标点 id
    },{
         
      source: '4', // String,必须,起始点 id
      target: '5',  // String,必须,目标点 id
    }]
    };
    
  • 传入数据
    graph.data(data);
    
  • 渲染图
    graph.render();    // 渲染图
    
  • 简单的图就完成了,渲染后展示如下
    image.png

3.节点和边的配置

在上述图的基础上,我们可以添加一些节点和边的配置,来优化这张图。

  • 节点
    在默认节点配置处添加style属性,首先可以为矩形添加圆角radius,然后我们设置边框的宽度lineWidth,边框的颜色stroke,填充背景色fill,再为节点添加阴影和鼠标移动到节点的效果。另外,可以通过labelCfg配置节点文字的样式,代码如下。
    // 默认节点配置(非必须)
    defaultNode: {
         
    type: 'rect',
    style: {
         
      radius: 5, // 圆角
      lineWidth: 2, // 边框宽度
      stroke: 'purple', // 边框颜色
      fill: 'pink', // 填充背景色
      shadowColor: '#1890ff', // 阴影颜色
      shadowBlur: 20, // 阴影范围
      shadowOffsetX: 0, // 阴影偏移位置
      shadowOffsetY: 0,
      cursor: 'move', // 鼠标移动到节点上的样式
    },
    labelCfg: {
         
      style: {
         
        fontSize: 14,
        fill: 'purple', // 文字颜色
        cursor: 'move', // 鼠标移动到文字上的样式
      }
    }
    },
    
    此时我们可以看一下效果。
    image.png
    如果你想要改变单个节点的样式,同样很简单,我们可以在节点数据的部分进行调整。
    image.png
    在代码中,我们调整了id为1的节点,再看一下绘制的图,可以发现第一个节点的样式就发生了变化。
    image.png
    G6支持多种节点类型,包括包括 circle,rect,ellipse,diamond,triangle,star,image,modelRect,donut,这里设置几种为大家进行展示,代码和实现效果如下。
    // 点集
      nodes: [{
         
        id: '1', // String,该节点存在则必须,节点的唯一标识
        label: 'node1',
        type: 'circle', // 节点类型-圆形
        style: {
           // 节点样式
          r: 40,
          stroke: 'blue',
          lineWidth: 5,
        }
      }, {
         
        id: '2', // String,该节点存在则必须,节点的唯一标识
        label: 'node2',
        type: 'rect', // 节点类型-矩形
        style: {
         
          width: 100,
          height: 50,
          radius: 6,
          lineWidth: 2,
        }
      }, {
         
        id: '3', // String,该节点存在则必须,节点的唯一标识
        label: 'node3',
        type: 'ellipse', // 节点类型-椭圆
        style: {
         
          rx: 50,
          ry: 30,
        }
      }, {
         
        id: '4', // String,该节点存在则必须,节点的唯一标识
        label: 'node4',
        type: 'diamond', // 节点类型-菱形
        size: [100, 50],
        style: {
         
          lineWidth: 2,
        }
      }, {
         
        id: '5', // String,该节点存在则必须,节点的唯一标识
        label: 'node5',
      }],
    
    image.png

  • 同样,G6也为我们提供了一些内置的边,例如,圆弧、贝塞尔曲线等等,在这里做部分展示。
    // 边集
    edges: [{
         
    source: '1', // String,必须,起始点 id
    target: '2',  // String,必须,目标点 id
    type: 'line', // 内置边-直线
    label: 'line',
    },
    {
         
    source: '2', // String,必须,起始点 id
    target: '3',  // String,必须,目标点 id
    type: 'polyline',// 内置边-折线
    label: 'polyline',
    }, {
         
    source: '2', // String,必须,起始点 id
    target: '4',  // String,必须,目标点 id
    type: 'arc',// 内置边-圆弧线
    label: 'arc',
    }, {
         
    source: '3', // String,必须,起始点 id
    target: '5', // String,必须,目标点 id
    }, {
         
    source: '4', // String,必须,起始点 id
    target: '5',  // String,必须,目标点 id
    }]
    

效果如下:
image.png

4.交互模式

G6提供图的交互功能,而且内置了很多行为,可供用户直接调用。我们只需在实例中添加modes属性,首先可以添加默认的一些交互,比如缩放画布zoom-canvas,拖拽画布drag-canvas,拖拽节点drag-node。

 // 交互
  modes: {
   
    default: ['zoom-canvas', 'drag-canvas', 'drag-node'],
  }

0020.gif
我们还可以为节点添加一些点击的视觉反馈,G6同样为我们提供了一些配置项。首先我们需要绑定事件,G6绑定事件的方法如下:

// G6 绑定事件
  graph.on('元素:事件名', event => {
   
  ------
  });

这样我们就可以通过代码实现节点选中以及鼠标悬浮的交互效果,同时要注意,可以通过findAllByState方法寻找选中的节点,在点击画布或者其他节点时,清除不需要的节点的选中状态,节点事件代码如下:
image.png
当然,不要忘记添加鼠标悬浮和点击的交互样式,也很简单。
image.png
最后看一下实现效果吧。

0021.gif

5.其他的配置项介绍

具体的配置项可以去官网查阅,在这里我简单列举
名称| 类型| 描述
------- | ------- | -------
fitView| Boolean| 是否开启画布自适应。开启后图自动适配画布大小。
modes| Object| 设置画布的模式。详情可见 G6 中的 Mode 文档。
defaultNode| Object| 默认状态下节点的配置,比如 shape, size, color。会被写入的 data 覆盖。
defaultEdge| Object| 默认状态下边的配置,比如 shape, size, color。会被写入的 data 覆盖。
animate| Boolean|是否启用全局动画。默认false。
layout| Object|布局配置项,使用 type 字段指定使用的布局方式,type可取以下值:random, radial, mds, circular, fruchterman, force, dagre。

6.G6在react中的使用

示例如图(源码来自官网Demo,参考文档
image.png
在React中,通过可以通过ref.current获取DOM元素,通过useEffect完成实例化。


G6除了一些内置的属性外,还支持用户自定义边、节点以及一些交互等,功能很强大,可以实现叫高水准的可视化需求,感兴趣的同学可以都尝试一下。

相关文章
在Vue3项目中使用 vue3-seamless-scroll 无缝滚动插件
本文介绍了如何在Vue3项目中使用`vue3-seamless-scroll`插件实现无缝滚动效果,并提供了详细的示例代码和运行效果。
9063 0
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7625 1
|
JSON JavaScript 数据可视化
G6初识
简单介绍G6的用法,适合新手快速入门
1171 0
|
SQL 关系型数据库 大数据
plsql 导入导出表、数据、序列、视图
 一、导出: 1、打开plsql-->工具----》导出用户对象(可以导出表结构和序列、视图) ps:如果上面不选中"包括所有者",这样到导出的表结构等就不包含所有者, 这样就可以将A所有者的表结构等导入到B所有者的表空间中 2、导出表结构和表数据: 二、导入: 1、首先要创建用户和表空间 (1)创建用户: (2)创建表空间:电脑开始菜单-----》找到oracle目录
3424 0
|
设计模式 负载均衡 算法
【高可用架构】高可用性架构模式
随着企业客户部署的任务关键型基于web的服务的数量不断增加,对设计最佳网络可用性解决方案的深入理解的需求前所未有地重要。高可用性(HA)已成为此类系统开发的关键方面。高可用性简单地指的是一个组件或系统持续运行一段时间。
|
1月前
|
人工智能 安全 算法
一文读懂 Graphify 知识图谱
Graphify 是一款开源、本地优先的多模态知识图谱工具,支持一键将代码/文档/PDF/图片等全量项目材料自动构建成可查询、持久化图谱,降低大模型71.5倍Token消耗,零向量库依赖,安全可控、增量更新,广泛用于AI编程助手增强与大型项目知识管理。(239字)
485 1
|
缓存 并行计算 负载均衡
大模型推理优化实践:KV cache复用与投机采样
在本文中,我们将详细介绍两种在业务中实践的优化策略:多轮对话间的 KV cache 复用技术和投机采样方法。我们会细致探讨这些策略的应用场景、框架实现,并分享一些实现时的关键技巧。
|
小程序 容灾
单点登录模式
单点登录模式
1850 0