---
title: 插件总览
order: 0
---
## 什么是插件
插件(Plugin)是 G6 中最灵活的扩展机制,用户可以通过插件来扩展 G6 的功能,例如在画布中额外挂载图形组件、实现撤销重做等功能。
绝大多数的定制需求都可以通过插件来实现,G6 内置了一些常用的插件,例如:[Tooltip](/manual/plugin/tooltip)、[Grid](/manual/plugin/grid-line)、[History](/manual/plugin/history)。
## 内置插件
G6 提供了丰富的内置插件,涵盖多种常见功能场景:
| 分类 | 插件名称 | 注册类型 | 功能描述 |
| ---------------- | ------------------------------------------------------------------------------------------ | ------------------ | -------------------------------------- |
| **视觉样式增强** | | | |
| | [网格线](/manual/plugin/grid-line) | `grid-line` | 在画布上显示网格参考线 |
| | [背景](/manual/plugin/background) | `background` | 为画布添加背景图片或颜色 |
| | [水印](/manual/plugin/watermark) | `watermark` | 为画布添加水印,保护版权 |
| | [轮廓包围](/manual/plugin/hull) | `hull` | 为指定节点集合创建轮廓 |
| | [气泡集](/manual/plugin/bubble-sets) | `bubble-sets` | 创建平滑气泡状的元素集合轮廓 |
| | [对齐线](/manual/plugin/snapline) | `snapline` | 拖动元素时显示对齐参考线 |
| **导航与概览** | | | |
| | [缩略图](/manual/plugin/minimap) | `minimap` | 显示图的缩略预览,支持导航 |
| | [全屏](/manual/plugin/fullscreen) | `fullscreen` | 支持图表全屏显示和退出 |
| | [时间轴](/manual/plugin/timebar) | `timebar` | 提供时序数据的筛选和播放控制 |
| **交互控件** | | | |
| | [工具栏](/manual/plugin/toolbar) | `toolbar` | 提供常用操作按钮集合 |
| | [上下文菜单](/manual/plugin/contextmenu) | `contextmenu` | 右键点击时显示可选操作菜单 |
| | [提示框](/manual/plugin/tooltip) | `tooltip` | 悬停时显示元素详细信息 |
| | [图例](/manual/plugin/legend) | `legend` | 显示图表数据的类别和对应样式说明 |
| **数据探索** | | | |
| | [鱼眼放大镜](/manual/plugin/fisheye) | `fisheye` | 提供焦点+上下文的探索体验 |
| | [边过滤镜](/manual/plugin/edge-filter-lens) | `edge-filter-lens` | 在指定区域内筛选显示边 |
| | [边绑定](/manual/plugin/edge-bundling) | `edge-bundling` | 将相似路径的边捆绑在一起,减少视觉混乱 |
| **高级功能** | | | |
| | [历史记录](/manual/plugin/history) | `history` | 支持撤销/重做操作 |
| | [相机设置](https://github.com/antvis/G6/blob/v5/packages/g6/src/plugins/camera-setting.ts) | `camera-setting` | 配置3D场景下的相机参数 |
各插件的详细配置可参考 [内置插件文档](/manual/plugin/grid-line)。
## 配置方式
### 基本配置
在图实例初始化时,通过 `plugins` 数组指定需要的插件:
```javascript {}5
import { Graph } from '@antv/g6';
const graph = new Graph({
// 其他配置...
plugins: ['grid', 'minimap', 'tooltip'],
});
```
### 配置插件参数
对于需要自定义参数的插件,可以使用 `object` 形式配置属性:
```javascript {5-9}
const graph = new Graph({
// 其他配置...
plugins: [
'grid',
{
type: 'tooltip',
key: 'my-tooltip', // 为插件指定key,便于后续更新
getContent: (e) => `
节点:${e.target.id}
`,
},
],
});
```
### 动态更新插件
G6 支持在图实例运行期间动态管理插件,满足复杂交互需求:
通过 [getPlugins](/api/plugin#graphgetplugins) 方法获取当前插件列表:
```javascript
// 获取插件列表
const plugins = graph.getPlugins();
// console.log(plugins) 👉 ['minimap', 'grid']
```
可以通过 [setPlugins](/api/plugin#graphsetpluginsplugins) 方法调整插件:
```javascript
// 添加新插件
graph.setPlugins((plugins) => [...plugins, 'minimap']);
// 移除插件
graph.setPlugins((plugins) => plugins.filter((p) => p !== 'grid'));
```
可以通过 [updatePlugin](/api/plugin#graphupdatepluginplugin) 方法更新插件的配置:
```javascript {6,14}
const graph = new Graph({
// 其他配置...
plugins: [
{
type: 'tooltip',
key: 'my-tooltip',
getContent: (e) => `节点:${e.target.id}
`,
},
],
});
// 更新单个插件
graph.updatePlugin({
key: 'my-tooltip',
getContent: (e) => `更新的内容:${e.target.id}
`,
});
```
:::warning{title=注意}
使用 `updatePlugin` 方法时,需要在初始化时为插件指定唯一的 `key`。
:::
### 卸载插件
使用 [setPlugins](/api/plugin#graphsetpluginsplugins) 方法同样可以卸载插件,将插件配置列表置为空即可:
```javascript
// 卸载所有插件
graph.setPlugins([]);
```
### 调用插件方法
一些插件提供了可供用户调用的 API 方法,例如 `history` 插件提供了 `undo` 和 `redo` 方法,用户可以通过调用这些方法来实现撤销和重做操作。
要调用这些方法,需要先获取到插件实例,可通过 [getPluginInstance](/api/plugin#graphgetplugininstancekey) 方法获取:
```javascript
// 配置插件
const graph = new Graph({
plugins: [{ type: 'history', key: 'my-history' }],
});
// 获取插件实例
const history = graph.getPluginInstance('my-history');
// 调用插件方法
history.undo();
history.redo();
```
:::warning{title=注意}
`graph.getPluginInstance` 方法接收插件 key 值作为参数,因此如果需要获取插件实例,需要将对应插件配置为 `object` 的形式,并传入 `key` 值。
:::
更多与插件相关的 API 请参考 [插件 API 文档](/api/plugin)。
## 自定义插件
当内置插件无法满足需求时,你可以:
- 继承和扩展现有插件
- 创建全新的自定义插件
自定义插件需要先注册后使用。详细教程请参考 [自定义插件](/manual/plugin/custom-plugin) 文档。
```javascript
import { register, ExtensionCategory } from '@antv/g6';
import { MyCustomPlugin } from './my-custom-plugin';
// 注册自定义插件
register(ExtensionCategory.PLUGIN, 'my-custom-plugin', MyCustomPlugin);
// 使用自定义插件
const graph = new Graph({
plugins: ['my-custom-plugin'],
});
```
通过合理组合和配置插件,你可以构建出功能丰富、交互体验出色的图可视化应用。