当数据中没有节点位置信息,或者数据中的位置信息不满足需求时,需要借助一些布局算法对图进行布局。G6 提供了 9 种一般图的布局和 4 种树图的布局:

  • 一般图:

    • Random Layout:随机布局;
    • Force Layout:经典力导向布局;(布局网络中粒子之间具有引力和斥力,从随机无序的布局不断演变为趋于平衡稳定的布局。适用于描述事物间关系,比如人物关系、计算机网络关系等。)
    • Circular Layout:环形布局;
    • Radial Layout:辐射状布局;
    • MDS Layout:高维数据降维算法布局;
    • Fruchterman Layout:Fruchterman 布局,一种力导布局;
    • Dagre Layout:层次布局;
    • Concentric Layout:同心圆布局,将重要(默认以度数为度量)的节点放置在布局中心;
    • Grid Layout:格子布局,将节点有序(默认是数据顺序)排列在格子上。
  • 树图布局:
    • Dendrogram Layout:树状布局(叶子节点布局对齐到同一层);
    • CompactBox Layout:紧凑树布局;
    • Mindmap Layout:脑图布局;
    • Intended Layout:缩进布局。

本教程中,我们使用的是力导向布局 (Force Layout)。

取消自动适配画布

我们在之前的教程里面,为了能够将超出画布的图适配到视野中,在实例化图时使用了 fitView 配置项。这节开始我们将会去掉这个特性。因为复杂的布局系统会打破适配的规则,反而会造成更多的困扰。让我们将相关的适配代码变为注释:

const graph = new G6.Graph({// ...// fitView: true,// fitViewPadding: [ 20, 40, 50, 20 ]
});

默认布局

当实例化图时没有配置布局时:

  • 若数据中节点有位置信息(x 和 y),则按照数据的位置信息进行绘制;
  • 若数据中节点没有位置信息,则默认使用 Random Layout 进行布局。

配置布局

G6 使用布局的方式非常简单,在图实例化的时候,加上 layout 配置即可。下面代码在实例化图时设置了布局方法为 type: ‘force’,即经典力导向图布局。并设置了参数 preventOverlap: true ,表示希望节点不重叠。

const graph = new G6.Graph({// ...                      // 其他配置项layout: {                // Object,可选,布局的方法及其配置项,默认为 random 布局。type: 'force',         // 指定为力导向布局preventOverlap: true,  // 防止节点重叠// nodeSize: 30        // 节点大小,用于算法中防止节点重叠时的碰撞检测。由于已经在上一节的元素配置中设置了每个节点的 size 属性,则不需要在此设置 nodeSize。}
});

结果如下:

如图所示,节点按照力导向布局自动平衡。但是图中的节点过于拥挤,边上的文字信息被挤占,无法看清。我们希望布局计算边的距离可以更长一些。G6 的力导向布局提供了 linkDistance 属性用来指定布局的时候边的距离长度:

const graph = new G6.Graph({// ...layout: {type: 'force',preventOverlap: true,linkDistance: 100, // 指定边距离为100},
});

结果如下:


提示:布局将在调用 graph.render() 时执行计算。

完整代码

至此,完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Tutorial Demo</title>
</head>
<body>
<div id="mountNode"></div>
<script src="https://gw.alipayobjects.com/os/antv/pkg/_antv.g6-3.1.0/build/g6.js"></script>
<script>const graph = new G6.Graph({container: 'mountNode',width: 800,height: 600,defaultNode: {size: 30,labelCfg: {style: {fill: '#fff',},},},defaultEdge: {labelCfg: {autoRotate: true,},},layout: {type: 'force', // 设置布局算法为 forcelinkDistance: 200, // 设置边长为 100preventOverlap: true, // 设置防止重叠},});const main = async () => {const response = await fetch('https://gw.alipayobjects.com/os/basement_prod/6cae02ab-4c29-44b2-b1fd-4005688febcb.json',);const remoteData = await response.json();const nodes = remoteData.nodes;const edges = remoteData.edges;nodes.forEach(node => {if (!node.style) {node.style = {};}node.style.lineWidth = 1;node.style.stroke = '#666';node.style.fill = 'steelblue';switch (node.class) {case 'c0': {node.type = 'circle';break;}case 'c1': {node.type = 'rect';node.size = [35, 20];break;}case 'c2': {node.type = 'ellipse';node.size = [35, 20];break;}}});edges.forEach(edge => {if (!edge.style) {edge.style = {};}edge.style.lineWidth = edge.weight;edge.style.opacity = 0.6;edge.style.stroke = 'grey';});graph.data(remoteData);graph.render();};main();
</script>
</body>
</html>

G6 图可视化引擎——入门教程——使用图布局 Layout相关推荐

  1. G6 图可视化引擎——入门教程——前言

    什么是 G6 G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等基础的图可视化能力.旨在让关系变得透明,简单.让用户获得关系数据的 Insight. 入门教程简介 我们在本入门教程中 ...

  2. G6 图可视化引擎——入门教程——元素及其配置

    图的元素特指图上的节点 Node 和边 Edge .在上一章节中,我们已经将 Tutorial 案例的图绘制了出来,但是各个元素及其 label 在视觉上很简陋.本文通过将上一章节中简陋的元素美化成如 ...

  3. G6 图可视化引擎——入门教程——图的交互 Behavior

    G6 封装了一系列交互方法,方便用户直接使用.本文将为 Tutorial 案例 增加简单的交互:hover 节点.点击节点.点击边.放缩画布.拖拽画布.本节目标效果如下: 基本概念 交互行为 Beha ...

  4. G6 图可视化引擎——入门教程——绘制 Tutorial 案例

    本文将进行 Tutorial 案例的简单绘制和配置.通过本文,你将知道创建一般图时一些常用的配置项及其作用. 基础绘制 创建容器 需要在 HTML 中创建一个用于容纳 G6 绘制的图的容器,通常为 d ...

  5. G6 图可视化引擎——入门教程——动画

    由于动画机制较为复杂,我们未在 Tutorial-案例 中增加动画. G6 的动画分为两个层次: 图全局动画:图整体变化时的动画过渡: 元素动画:节点和边的动画效果. 全局动画 G6 的全局动画指通过 ...

  6. G6 图可视化引擎——入门教程——插件与工具

    为辅助用户在图上探索,G6 提供了一些辅助工具,其中一部分是插件工具,另一部分是交互工具. 本文将为 Tutorial 案例 添加缩略图插件.网格插件.节点提示框.边提示框. 插件 使用插件时,有三个 ...

  7. G6 图可视化引擎——简介

    什么是 G6 G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等图可视化的基础能力.旨在让关系变得透明,简单.让用户获得关系数据的 Insight. 基于 G6,用户可以快速搭建自己 ...

  8. G6图可视化引擎 v4.1.7

    介绍: G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等图可视化的基础能力.旨在让关系变得透明,简单.让用户获得关系数据的 Insight. 基于 G6,用户可以快速搭建自己的 图 ...

  9. G6 图可视化引擎——核心概念——节点/边/Combo——内置节点——Rect

    G6 内置了 rect 节点,其默认样式如下.标签文本位于矩形中央. 使用方法 如 内置节点 一节所示,配置节点的方式有两种:实例化图时全局配置,在数据中动态配置. 1 实例化图时全局配置 用户在实例 ...

最新文章

  1. win7计算机创建新用户,win7系统无法创建新用户的解决方法
  2. python【数据结构与算法】搜索初探
  3. MATLAB中GUI设计的基本操作
  4. Excel 2007中创建或删除自定义数字格式
  5. 随笔② Java中的关键字 --- final关键字
  6. 【转】单元测试基础知识
  7. 机器视觉用c还是python_机器视觉_opencv-python环境搭建
  8. wer 流程图编程_WER机器人搭建学习实操练习
  9. PS小技巧 证件照蓝底/红底换白底(非抠图,抠图头发边缘处理效果差)
  10. 提供搜题公众号题库接口
  11. PS学习之动态表情制作
  12. 交通灯keil程序加2位数码管_51单片机红绿灯两个数码管显示实验报告
  13. [原创]python计算中文文本相似度神器
  14. uniapp H5端使用高德地图完成路线规划
  15. 再见postman,被这个一站式接口管理工具折服了
  16. css flex布局超长自动换行
  17. 多标签分类算法的研究进展
  18. 产品经理,是否应该有行业属性
  19. 无线通信基础 无线信道统计描述(一)
  20. 为什么 CCSP 认证的价值如此之高? 怎样获得 CCSP 认证?

热门文章

  1. [转]密码技术-实现数字信封和数字签名
  2. 检测iOS的APP性能的一些方法
  3. M2 Scrum 12.05
  4. 【数据结构总结】第八章 排序
  5. 永恒python怎么强化_永恒python加6_pythontip 挑战python (6-10)
  6. 小白重装系统教程_重装系统教程,小编教你怎么重装win10系统
  7. 河中跳房子(noiopenjudge,noip2015)
  8. iOS url出现特殊字符处理 -- stringByAddingPercentEncodingWithAllowedCharacters
  9. [分治] Jzoj P5807 简单的区间
  10. Neo4j简单的样例