• Antv G6入门之旅--combo图


    目录

    什么是AntV G6

    G6 的特性

    G6 文档

    安装

    1 在项目中使用 NPM 包引入

    2 在 HTML 中使用  CDN 引入

    使用

    Step 1 创建容器

    Step 2 数据准备

    Step 3 创建关系图

    Step 4 配置数据源,渲染

    React 中使用 G6

    Combo图


    什么是AntV G6

            G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明,简单。让用户获得关系数据的 Insight,为数据科学家和开发者提供了一种全新的方式来展示和探索数据。我曾经使用过 ECharts 与 D3.js,当我遇见 AntV G6 后,突感惊喜,其内含丰富的效果与强大的功能。相对于 ECharts,AntV G6 的图表种类更多,也更灵活,更容易上手;而相对于 D3.js,AntV G6 的 API 更为简单易用,适合快速上手。

            基于 G6,用户可以快速搭建自己的 图分析 或 图编辑 应用。

            如果您还没有使用过 G6, 建议通过 快速上手 抢先体验 G6 的魅力。

    G6 的特性

    G6 作为一款专业的图可视化引擎,具有以下特性:

    • 优秀的性能:支持大规模图数据的交互与探索;
    • 丰富的元素:内置丰富的节点与边元素,自由配置,支持自定义;
    • 可控的交互:内置 10+ 交互行为,支持自定义交互;
    • 强大的布局:内置了 10+ 常用的图布局,支持自定义布局;
    • 便捷的组件:优化内置组件功能及性能;
    • 友好的体验:根据用户需求分层梳理文档,支持 TypeScript 类型推断。

    除了默认好用、配置自由的内置功能,元素、交互、布局均具有高可扩展的自定义机制。

    G6 文档

    安装

    1 在项目中使用 NPM 包引入

    Step 1: 使用命令行在项目目录下执行以下命令:

    npm install --save @antv/g6

    Step 2: 在需要用的 G6 的 JS 文件中导入:

    import G6 from '@antv/g6';

    2 在 HTML 中使用  CDN 引入

    1. // version <= 3.2
    2. <script src="https://gw.alipayobjects.com/os/antv/pkg/_antv.g6-{$version}/build/g6.js">script>
    3. // version >= 3.3
    4. <script src="https://gw.alipayobjects.com/os/lib/antv/g6/{$version}/dist/g6.min.js">script>
    5. // version >= 4.0
    6. <script src="https://gw.alipayobjects.com/os/lib/antv/g6/4.3.11/dist/g6.min.js">script>

    ⚠️ 注意:

    使用

            你可以通过以下的代码来创建一个基础的图形:

    1. import G6 from '@antv/g6';
    2. const graph = new G6.Graph({
    3. container: 'mountNode', // 指定挂载节点的id
    4. width: 800, // 指定图形的宽度
    5. height: 600, // 指定图形的高度
    6. });

            在这里,我们创建了一个基础的图形实例。

            创建一个 G6 的关系图仅需要下面几个步骤:

    1. 创建关系图的 HTML 容器;
    2. 数据准备;
    3. 创建关系图;
    4. 配置数据源,渲染。

    Step 1 创建容器

            需要在 HTML 中创建一个用于容纳 G6 绘制的图的容器,通常为 div  标签。G6 在绘制时会在该容器下追加 canvas 标签,然后将图绘制在其中。

    <div id="mountNode">div>

    Step 2 数据准备

    引入 G6 的数据源为 JSON 格式的对象。该对象中需要有节点(nodes)和边(edges)字段,分别用数组表示:

    1. const data = {
    2. // 点集
    3. nodes: [
    4. {
    5. id: 'node1', // String,该节点存在则必须,节点的唯一标识
    6. x: 100, // Number,可选,节点位置的 x 值
    7. y: 200, // Number,可选,节点位置的 y 值
    8. },
    9. {
    10. id: 'node2', // String,该节点存在则必须,节点的唯一标识
    11. x: 300, // Number,可选,节点位置的 x 值
    12. y: 200, // Number,可选,节点位置的 y 值
    13. },
    14. ],
    15. // 边集
    16. edges: [
    17. {
    18. source: 'node1', // String,必须,起始点 id
    19. target: 'node2', // String,必须,目标点 id
    20. },
    21. ],
    22. };

    注意:

    • nodes 数组中包含节点对象。每个节点对象中唯一的、必要的 id 以标识不同的节点,x、 y 指定该节点的位置;
    • edges 数组中包含边对象。source 和 target 是每条边的必要属性,分别代表了该边的起始点 id 与 目标点 id
    • 点和边的其他属性参见链接:内置节点 和 内置边

    Step 3 创建关系图

            创建关系图(实例化)时,至少需要为图设置容器、宽和高。

    1. const graph = new G6.Graph({
    2. container: 'mountNode', // String | HTMLElement,必须,在 Step 1 中创建的容器 id 或容器本身
    3. width: 800, // Number,必须,图的宽度
    4. height: 500, // Number,必须,图的高度
    5. });

    Step 4 配置数据源,渲染

    1. graph.data(data); // 读取 Step 2 中的数据源到图上
    2. graph.render(); // 渲染图

    React 中使用 G6

    如果你想在 React 中使用 G6 ,可以参考我们提供了的 React 中使用 G6 的 Demo

    更多关于 React 中如何使用 G6,请参考 React 中使用 G6 的文档。有任何问题都可以通过页面底部的钉钉交流群和我们沟通,也非常欢迎给我们提 issues 或 PR: GitHub - antvis/G6: ♾ A Graph Visualization Framework in JavaScript

    Combo图

            接下来,让我们来创建一些节点和边,组成一个Combo图。

            Combo图是一种特殊的图形,它结合了多种图形类型(比如节点图和边图)的优点。在AntV G6中,你可以通过简单地组合不同的节点类型和边类型来创建Combo图。以下是一个创建Combo图的例子:

    1. import G6 from '@antv/g6';
    2. const data = {
    3. nodes: [
    4. { id: 'node1', label: 'Node 1', type: 'circle' },
    5. { id: 'node2', label: 'Node 2', type: 'rect' },
    6. { id: 'node3', label: 'Node 3', type: 'ellipse' },
    7. ],
    8. edges: [
    9. { source: 'node1', target: 'node2', type: 'line' },
    10. { source: 'node2', target: 'node3', type: 'curve' },
    11. { source: 'node3', target: 'node1', type: 'arrow' },
    12. ],
    13. };
    14. const graph = new G6.Graph({
    15. container: 'mountNode', // 指定挂载节点的id
    16. width: 800, // 指定图形的宽度
    17. height: 600, // 指定图形的高度
    18. });
    19. graph.data(data); // 加载数据
    20. graph.render(); // 渲染图形

            在这个例子中,我们创建了一个包含三种节点类型(圆形、矩形和椭圆形)和三种边类型的Combo图。每个节点都有自己的类型,并且每条边都有自己的类型。通过这种方式,我们可以创建出非常复杂且富有表现力的Combo图。

            此外,AntV G6还提供了许多其他的配置项,例如节点的样式、边的样式、标签、动画等等。你可以通过阅读官方文档来了解更多关于AntV G6的信息。这些配置项可以让你更加灵活地控制你的Combo图的表现形式。例如:

    1. graph.node(node => {
    2. return {
    3. type: node.shape, // 根据节点数据定义节点类型
    4. style: {
    5. fill: node.color, // 根据节点数据定义节点颜色
    6. // 其他样式设置...
    7. },
    8. label: {
    9. text: node.label, // 根据节点数据定义标签文本
    10. // 其他标签设置...
    11. },
    12. };
    13. });

            实现一个复杂combo:

    1. // 缩略图
    2. const minimap = new G6.Minimap({
    3. size: [150,100],
    4. type: "delegate"
    5. });
    6. // 右键菜单
    7. const contextmenu = new G6.menu({...});
    8. // 节点提示框
    9. const tooltip = new G6.Tooltip({...});
    10. // 边框提示框
    11. const edgetooltip = new G6.Tooltip({...});
    12. // 画布
    13. const graph = new G6.Graph({
    14. container: "g6",
    15. width: _this.data.width,
    16. height: _this.data.height,
    17. sortByCombo: true,
    18. fitView: true,
    19. enabledStack: true,
    20. defaultNode: {
    21. type: "image",
    22. img: _this.data.nodesLegend.url,
    23. size: [50],
    24. style: {
    25. cursor: "pointer"
    26. }
    27. },
    28. defaultEdge: {
    29. type: "line",
    30. style: {
    31. cursor: "pointer"
    32. },
    33. labelCfg: {
    34. position: "start",
    35. autoRotate: true,
    36. refX: 10,
    37. refY: 10
    38. }
    39. },
    40. groupByTypes: false,
    41. defaultCombo: {
    42. type: "rect",
    43. style: {
    44. fill: "#f3f9ff",
    45. stroke: "a3b1bf",
    46. lineWidth: 1
    47. },
    48. labelCfg: {
    49. refY: 10,
    50. position: "top",
    51. style: {
    52. fontSize: 12
    53. }
    54. }
    55. },
    56. nodeStateStyles: {...},
    57. edgeStateStyles: {...},
    58. comboStateStyles: {...},
    59. modes: {
    60. default: [ ...],
    61. ...,
    62. // 分区,可拖拽画布、缩放画布、拖拽节点、拖拽combo、shift矩形框选、自定义增加combo、自定义删除combo
    63. editCombo: [
    64. {
    65. type: "drag-canvas",
    66. enableOptimize: true
    67. },
    68. {
    69. type: "zoom-canvas",
    70. sensitivity: 1.8
    71. },
    72. { // 禁止拖动到空白画布
    73. type: "drag-node",
    74. delegate: false,
    75. onlyChangeComboSize: false,
    76. shouldEnd: (s, e, self) => {
    77. if (e) return true;
    78. return false;
    79. }
    80. },
    81. {
    82. type: "drag-combo",
    83. enableDelegate: true,
    84. onlyChangeComboSize: true
    85. },
    86. { // shift+左键,矩形框选
    87. type: "brush-select",
    88. brushStyle: {
    89. fill: "lightblue",
    90. fillOpacity: 0.2,
    91. stroke: "lightblue",
    92. lineWidth: 1
    93. }
    94. },
    95. { // 双击combo 收缩/展开
    96. type: "collapse-expand-combo",
    97. trigger: "dblclick",
    98. relayout: false // 收缩展开后,不重新布局
    99. },
    100. // 自定义编辑节点
    101. "click-add-combo", // 新增
    102. "delete-combo" // 删除
    103. ],
    104. },
    105. plugins: [minimap, contextmenu, tooltip, edgetooltip]
    106. })
    107. G6.registerBehavior("click-add-combo", {});
    108. G6.registerBehavior("delete-combo", {});
    109. graph.setMode(mode);
    110. graph.zoom(zoom);
    111. graph.data(this.data);
    112. graph.render();
    113. this.data.graph = graph;
    实现效果

  • 相关阅读:
    Redis缓存简述
    分类神经网络3:DenseNet模型复现
    【软考软件评测师】第二十三章 系统安全设计(认证与加密)
    软件设计原则(上)
    SparkStreaming消费kafka存储到Elasticsearch
    【无标题】
    SVN使用总结
    实验:vlan的基本配置
    图解设计模式:身份认证场景的应用
    研发项目管理改进方法有哪些
  • 原文地址:https://blog.csdn.net/qq_51588894/article/details/133910461