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

相关文章
|
Windows 计算机视觉 安全
流媒体技术学习笔记之(十三)Windows安装FFmpeg
一、下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二、解压安装: 下载并解压FFmpeg文件夹,它会生成一个类似名为“ffmpeg-20150504-git-eb9fb50-win32-static”的新文件夹:   打开你想安装的任意磁盘,例如:d盘。
5932 0
|
1月前
|
人工智能 安全 算法
一文读懂 Graphify 知识图谱
Graphify 是一款开源、本地优先的多模态知识图谱工具,支持一键将代码/文档/PDF/图片等全量项目材料自动构建成可查询、持久化图谱,降低大模型71.5倍Token消耗,零向量库依赖,安全可控、增量更新,广泛用于AI编程助手增强与大型项目知识管理。(239字)
487 1
|
8月前
|
JSON 安全 API
京东API接口的应用场景介绍
京东API是京东开放平台提供的标准化接口,基于RESTful架构,支持商品查询、订单管理、支付、物流跟踪与营销数据分析等核心电商功能。通过OAuth 2.0认证保障安全,助力开发者高效构建集成应用。
|
监控 前端开发 JavaScript
前端工程化和传统前端开发的区别是什么?
前端工程化相比传统前端开发,在开发模式、代码组织与管理、构建与部署流程、团队协作、性能优化以及技术选型等方面都有了显著的改进和提升,能够更好地应对现代前端应用开发的复杂性和高要求。
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7625 1
在Vue3项目中使用 vue3-seamless-scroll 无缝滚动插件
本文介绍了如何在Vue3项目中使用`vue3-seamless-scroll`插件实现无缝滚动效果,并提供了详细的示例代码和运行效果。
9064 0
|
API PHP 索引
这插件太危险了!PDFParser自动扒取PDF每天躺赚300+的暴利搬运术
本文介绍了如何使用PHP提取PDF文档中的文字内容。为解决PDF文档“不可编辑”或“文本无法复制”的问题,推荐使用免费的PHP库——PDFParser。通过Composer安装后,可利用其简单强大的API解析PDF文件,提取文本内容。文章详细演示了获取PDF基本信息、全文内容、指定页内容及循环输出每页文本的方法,并附带中英文PDF示例,操作简便实用。
725 3
这插件太危险了!PDFParser自动扒取PDF每天躺赚300+的暴利搬运术
|
人工智能 自然语言处理 数据可视化
什么是AIGC?如何使用AIGC技术辅助办公?
2分钟了解AIGC技术及其如何提高日常办公效率!
4660 4
什么是AIGC?如何使用AIGC技术辅助办公?
|
存储 移动开发 前端开发
HTML5时代来临,这些新特性你掌握了吗?一篇文章带你玩转Web前端技术潮流!
【8月更文挑战第26天】HTML5(简称H5)作为新一代Web标准,相比HTML4带来了诸多增强功能。
611 2