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

相关文章
|
前端开发 NoSQL JavaScript
常见接口和服务幂等性问题及解决方案
常见接口和服务幂等性问题及解决方案
928 0
|
3月前
|
JSON 安全 API
京东API接口的应用场景介绍
京东API是京东开放平台提供的标准化接口,基于RESTful架构,支持商品查询、订单管理、支付、物流跟踪与营销数据分析等核心电商功能。通过OAuth 2.0认证保障安全,助力开发者高效构建集成应用。
310 2
|
监控 前端开发 JavaScript
前端工程化和传统前端开发的区别是什么?
前端工程化相比传统前端开发,在开发模式、代码组织与管理、构建与部署流程、团队协作、性能优化以及技术选型等方面都有了显著的改进和提升,能够更好地应对现代前端应用开发的复杂性和高要求。
|
数据可视化 JavaScript
Vue3项目使用G6可视化组件实现一个树形机构图
在Vue 3项目中使用G6可视化组件库实现树形机构图的构建和展示。
3513 1
Vue3项目使用G6可视化组件实现一个树形机构图
|
存储 安全 开发工具
App隐私合规评估实务和要点
随着移动互联网的高速发展及监管部门针对移动互联网应用程序(以下简称“App”)隐私合规监管趋严,特别是在个人信息保护法的实施下。本文将深入探讨App隐私合规评估的要点和难点,提供详细的信息,并提供一套轻量级和自动化的App隐私合规治理方案,降低App业务被通报和下架等合规风险,以保障企业App业务正常运营。
1545 0
ElementPlus 之 el-select 多选实现全选功能
本文介绍了在ElementPlus框架中,如何通过自定义事件处理和条件判断实现`el-select`多选控件的全选功能。
2494 1
ElementPlus 之 el-select 多选实现全选功能
|
存储 安全 Java
synchronized原理详解(通俗易懂超级好)
当系统检查到锁是重量级锁之后,会把等待想要获得锁的线程进行阻塞,被阻塞的线程不会消耗cpu。但是阻塞或者唤醒一个线程时,都需要操作系统来帮忙,这就需要从用户态转换到内核态,而转换状态是需要消耗很多时间的,有可能比用户执行代码的时间还要长。
synchronized原理详解(通俗易懂超级好)
|
JavaScript 算法 数据可视化
antv/g6使用教程及图配置
antv/g6使用教程及图配置
3388 0
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
6853 1
|
存储 前端开发 JavaScript
Web前端主题色更换实现方式全解析(二)
Web前端主题色更换实现方式全解析(二)
684 0

热门文章

最新文章