--- title: 脑图树 Mindmap order: 18 --- ## 概述 脑图树布局适用于树状结构的层次化布局,支持左右两侧展开,深度相同的节点将会被放置在同一层。需要注意:布局**会**考虑节点的大小。参考更多脑图布局[样例](/examples#layout-mindmap)或[源码](https://github.com/antvis/hierarchy/blob/master/src/mindmap.js)。 img ## 配置方式 ```js const graph = new Graph({ layout: { type: 'mindmap', direction: 'H', preLayout: false, getHeight: () => 32, getWidth: () => 32, getVGap: () => 16, getHGap: () => 72, }, }); ``` ## 配置项 脑图树配置项图解 | 属性 | 描述 | 类型 | 默认值 | 必选 | | --------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------- | ------ | ---- | | type | 布局类型 | `mindmap` | - | ✓ | | direction | 布局方向,[可选值](#direction) | `H` \| `LR` \| `RL` \| `TB` \| `BT` | `LR` | | | getHeight | 计算每个节点的高度 | (d?: Node) => number | | ✓ | | getWidth | 计算每个节点的宽度 | (d?: Node) => number | | ✓ | | getVGap | 每个节点的垂直间隙,注意实际两个节点间的垂直间隙是2倍的vgap | (d?: Node) => number | | | | getHGap | 每个节点的水平间隙,注意实际两个节点间的水平间隙是2倍的hgap | (d?: Node) => number | | | | getSide | 设置节点排布在根节点的左侧/右侧,如未设置,则算法自动分配左侧/右侧。注意:该参数仅在`H`布局方向上生效 | (d?: Node) => string | | | ### direction > `H` \| `LR` \| `RL` \| `TB` \| `BT` **Default:** `'LR'` 树布局的方向 - `'H'`:horizontal(水平)—— 根节点的子节点分成两部分横向放置在根节点左右两侧。可传入`getSide`方法指定每个节点的左右分布逻辑,不传则默认将前半部分放置在右侧,后半部分放置在左侧。 水平布局 - `'LR' | 'TB'`:将子节点排布在根节点的右侧; 竖直布局 - `'RL'`:将子节点排布在根节点的左侧; 竖直布局 - `BT`:将子节点排布在根节点右侧,然后将整个图沿X轴旋转180°; 竖直布局 ### getWidth > _(d?: Node) => number_ 每个节点的宽度 示例: ```javascript (d) => { // d 是一个节点 if (d.id === 'testId') return 50; return 100; }; ``` ### getHeight > _(d?: Node) => number_ 每个节点的高度 示例: ```javascript (d) => { // d 是一个节点 if (d.id === 'testId') return 50; return 100; }; ``` ### getHGap > _(d?: Node) => number_ 每个节点的水平间隙 示例: ```javascript (d) => { // d 是一个节点 if (d.id === 'testId') return 50; return 100; }; ``` ### getVGap > _(d?: Node) => number_ 每个节点的垂直间隙 示例: ```javascript (d) => { // d 是一个节点 if (d.id === 'testId') return 50; return 100; }; ``` ### getSide > _(d?: Node) => string_ 设置节点排布在根节点的左侧/右侧。注意:该参数仅在`direction`为`H`时生效。如未设置,会默认将子节点前半部分放置在右侧,后半部分放置在左侧,参考[getSide自动计算逻辑](https://github.com/antvis/hierarchy/blob/d786901874f59d96c47e2a5dfe17b373eefd72e3/src/layout/separate-root.js#L11)。 示例: ```javascript (d) => { // d 是一个节点 if (d.id === 'test-child-id') return 'right'; return 'left'; }; ``` ### 布局适用场景 - 数据血缘图:`direction='H'`很适合渲染血缘图中查看指定节点的上下游血缘的场景,上游分布在中心节点的左侧,下游分布在右侧; - 思维导图:构建自定义的思维导图组件。