内置节点总览

G6 默认提供的节点是一个基础图形加一个文本图形的实现。可选的内置节点包括 circle,rect,ellipse,diamond,triangle,star,image,modelRect,这些内置节点的默认样式分别如下图所示。内置节点总览 - 图1

内置节点类型说明

下面表格中显示了内置的各类节点,同时对一些特殊的字段进行了说明:

名称描述默认示例
circle圆形:- size 是单个数字,表示直径- 圆心位置对应节点的位置- color 字段默认在描边上生效- 标签文本默认在节点中央- 更多字段见 circle 节点的配置内置节点总览 - 图2
rect矩形:- size 是数组,例如:[100, 50]- 矩形的中心位置是节点的位置,而不是左上角- color 字段默认在描边上生效- 标签文本默认在节点中央- 更多字段见 rect 节点的配置内置节点总览 - 图3
ellipse椭圆:- size 是数组,表示椭圆的长和宽- 椭圆的圆心是节点的位置- color 字段默认在描边上生效- 标签文本默认在节点中央- 更多字段见 ellipse 节点的配置内置节点总览 - 图4
diamond菱形:- size 是数组,表示菱形的长和宽- 菱形的中心位置是节点的位置- color 字段默认在描边上生效- 标签文本默认在节点中央- 更多字段见 diamond 节点的配置内置节点总览 - 图5
triangle三角形:- size 是数组,表示三角形的长和高- 三角形的中心位置是节点的位置- color 字段默认在描边上生效- 标签文本默认在节点下方- 更多字段见 triangle 节点的配置内置节点总览 - 图6
star星形:- size 是单个数字,表示星形的大小- 星星的中心位置是节点的位置- color 字段默认在描边上生效- 标签文本默认在节点中央- 更多字段见 star 节点的配置内置节点总览 - 图7
image图片:- size 是数组,表示图片的长和宽- 图片的中心位置是节点位置- img 图片的路径,也可以在 style 里面设置- color 字段不生效- 标签文本默认在节点下方- 更多字段见 image 节点的配置内置节点总览 - 图8
modelRect菱形:- size 是数组,表示菱形的长和宽- 菱形的中心位置是节点的位置- color 字段默认在描边上生效- 标签文本默认在节点中央- 若有 description 字段则显示在标签文本下方显示 description 内容- 更多字段见 modelRect 节点的配置内置节点总览 - 图9 内置节点总览 - 图10

节点的通用属性

所有内置的节点支持的通用属性:

名称是否必须类型备注
idtrueString节点编号
xfalseNumberx 坐标
yfalseNumbery 坐标
shapefalseString节点图形,默认为 'circle'
sizefalseNumberArray
anchorPointsfalseArray指定边连如节点的连接点的位置(相对于该节点而言),可以为空。例如: [0, 0],代表节点左上角的锚点,[1, 1],代表节点右下角的锚点。
stylefalseObject节点的样式属性
labelfalseString文本文字
labelCfgfalseObject文本配置项

样式属性 style

Object 类型。通过 style 配置来修改节点的填充色、边框颜色、阴影等属性。下表是 style 对象中常用的配置项:

名称是否必须类型备注
fillfalseString节点填充色
strokefalseString节点的描边颜色
lineWidthfalseNumber描边宽度
shadowColorfalseString阴影颜色
shadowBlurfalseNumber阴影范围
shadowOffsetXfalseNumber阴影 x 方向偏移量
shadowOffsetXfalseNumber阴影 y 方向偏移量

下面代码演示在实例化图时全局配置方法中配置 style

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 800,
  4. height: 600,
  5. defaultNode: {
  6. // ... 其他属性
  7. style: {
  8. fill: '#steelblue',
  9. stroke: '#eaff8f',
  10. lineWidth: 5,
  11. // ... 其他属性
  12. },
  13. },
  14. });

标签文本 label 及其配置 labelCfg

label String 类型。标签文本的文字内容。labelCfg Object 类型。配置标签文本。下面是 labelCfg 对象中的常用配置项:

名称是否必须类型备注
positionfalseString文本相对于节点的位置,目前支持的位置有: 'center''top''left''right''bottom'。默认为 'center'
offsetfalseNumberArray
stylefalseObject标签的样式属性

上表中的标签的样式属性 style 的常用配置项如下:

名称是否必须类型备注
fillfalseString文本颜色
strokefalseString文本描边颜色
lineWidthfalseNumber文本描边粗细
opacityfalseNumber文本透明度
fontfalseString文本内容的当前字体属性
fontSizefalseNumber文本字体大小

下面代码演示在实例化图时全局配置方法中配置 labellabelCfg

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 800,
  4. height: 600,
  5. defaultNode: {
  6. // ... 其他属性
  7. label: 'node-label',
  8. labelCfg: {
  9. position: 'bottom',
  10. offset: [10, 10, 10, 10],
  11. style: {
  12. fill: '#666',
  13. },
  14. },
  15. },
  16. });

节点的配置方法

配置节点的方式有三种:实例化图时全局配置,在数据中动态配置,使用 graph.node(nodeFn) 函数配置。这几种配置方法可以同时使用,优先级:

使用 graph.node(nodeFn) 配置 > 数据中动态配置 > 实例化图时全局配置

即有相同的配置项时,优先级高的方式将会覆盖优先级低的。

实例化图时全局配置

用户在实例化 Graph 时候可以通过 defaultNode 配置节点,这里的配置是全局的配置,将会在所有节点上生效。

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 800,
  4. height: 600,
  5. defaultNode: {
  6. shape: 'circle',
  7. // 其他配置
  8. },
  9. });

在数据中动态配置

如果需要为不同节点进行不同的配置,可以将配置写入到节点数据中。这种配置方式可以通过下面代码的形式直接写入数据,也可以通过遍历数据的方式写入。

  1. const data = {
  2. nodes: [{
  3. id: 'node0',
  4. size: 100,
  5. shape: 'rect',
  6. ... // 其他属性
  7. style: {
  8. ... // 样式属性,每种节点的详细样式属性参见各节点文档
  9. }
  10. },{
  11. id: 'node1',
  12. size: [50, 100],
  13. shape: 'ellipse',
  14. ... // 其他属性
  15. style: {
  16. ... // 样式属性,每种节点的详细样式属性参见各节点文档
  17. }
  18. },
  19. ... // 其他节点
  20. ],
  21. edges: [
  22. ... // 边
  23. ]
  24. }

使用 graph.node(nodeFn) 配置

该方法可以为不同节点进行不同的配置。提示:

  • 该方法必须在 render 之前调用,否则不起作用;
  • 由于该方法优先级最高,将覆盖其他地方对节点的配置,这可能将造成一些其他配置不生效的疑惑;
  • 该方法在增加元素、更新元素时会被调用,如果数据量大、每个节点上需要更新的内容多时,可能会有性能问题。
  1. // const data = ...
  2. // const graph = ...
  3. graph.node((node) => {
  4. return {
  5. id: node.id,
  6. shape: 'rect',
  7. style: {
  8. fill: 'blue'
  9. }
  10. }
  11. });
  12. graph.data(data);
  13. graph.render();

实例演练

  1. const data = {
  2. nodes: [{
  3. x: 100,
  4. y: 100,
  5. shape: 'circle',
  6. label: 'circle',
  7. },{
  8. x: 200,
  9. y: 100,
  10. shape: 'rect',
  11. label: 'rect',
  12. },{
  13. id: 'node-ellipse',
  14. x: 330,
  15. y: 100,
  16. shape: 'ellipse',
  17. label: 'ellipse'
  18. },{
  19. id: 'node-diamond',
  20. x: 460,
  21. y: 100,
  22. shape: 'diamond',
  23. label: 'diamond'
  24. },{
  25. id: 'node-triangle',
  26. x: 560,
  27. y: 100,
  28. //size: 80,
  29. shape: 'triangle',
  30. label: 'triangle'
  31. },{
  32. id: 'node-star',
  33. x: 660,
  34. y: 100,
  35. //size: [60, 30],
  36. shape: 'star',
  37. label: 'star'
  38. },{
  39. x: 760,
  40. y: 100,
  41. size: 50,
  42. shape: 'image',
  43. img: 'https://gw.alipayobjects.com/zos/rmsportal/XuVpGqBFxXplzvLjJBZB.svg',
  44. label: 'image',
  45. },{
  46. id: 'node-modelRect',
  47. x: 900,
  48. y: 100,
  49. shape: 'modelRect',
  50. label: 'modelRect'
  51. }]
  52. };
  53. const graph = new G6.Graph({
  54. container: 'mountNode',
  55. width: 1500,
  56. height: 300
  57. });
  58. graph.data(data);
  59. graph.render();

显示结果:内置节点总览 - 图11

  • triangle 节点和 image 节点的标签文本默认位置为:position:'bottom' ,其他节点文本的默认位置都为:position: 'center'

调整节点配置

下面演示通过将配置写入数据的方式,调整 id'node-ellipse' 的椭圆节点的文本位置,颜色和样式。将下面代码替换上面代码中 id'node-ellipse' 的节点数据即可生效。

  1. {
  2. id: 'node-ellipse',
  3. x: 330,
  4. y: 100,
  5. shape: 'ellipse',
  6. size: [60, 30],
  7. label: 'ellipse',
  8. labelCfg: {
  9. position: 'bottom',
  10. offset: 5
  11. },
  12. style: {
  13. fill: '#fa8c16',
  14. stroke: '#000',
  15. lineWidth: 2
  16. }
  17. }

内置节点总览 - 图12 再为 id'node-modelRect' 的 modelRect 节点添加描述文字,使用下面代码替换 id'node-modelRect' 的节点数据即可得到带有内容为 '描述文本xxxxxxxxxxx' 的 modelRect 节点。

  1. {
  2. id: 'node-modelRect',
  3. x: 900,
  4. y: 100,
  5. description: '描述文本xxxxxxxxxxx',
  6. shape: 'modelRect',
  7. label: 'modelRect'
  8. }

内置节点总览 - 图13

相关阅读