logo

G2

  • 文档
  • 图表介绍
  • API
  • 图表示例
  • 主题
  • 周边生态
  • 所有产品antv logo arrow
  • 5.3.3
  • 快速上手
  • 简介
    • 什么是 G2
    • 在前端框架中使用
    • Spec 和 API
  • 核心概念
    • 图表(Chart)
      • G2 图表组成
      • 如何使用图表
    • 标记(Mark)
      • 概览
      • area
      • box
      • boxplot
      • cell
      • chord
      • density
      • gauge
      • heatmap
      • image
      • interval
      • line
      • lineX
      • lineY
      • link
      • liquid
      • sunburst
      • point
      • polygon
      • range
      • rangeX
      • rangeY
      • rect
      • shape
      • text
      • vector
      • wordCloud
    • 视图(View)
    • 数据(Data)
      • 概览
      • custom
      • ema
      • fetch
      • filter
      • fold
      • inline
      • join
      • kde
      • log
      • map
      • pick
      • rename
      • slice
      • sort
      • sortBy
    • 编码(Encode)
    • 比例尺(Scale)
      • 概览
      • band
      • linear
      • log
      • ordinal
      • point
      • quantile
      • quantize
      • sqrt
      • threshold
      • time
      • pow
    • 转换(Transform)
      • 概览
      • bin
      • binX
      • diffY
      • dodgeX
      • flexX
      • group
      • groupColor
      • groupX
      • groupY
      • jitter
      • jitterX
      • jitterY
      • normalizeY
      • pack
      • sample
      • select
      • selectX
      • selectY
      • sortColor
      • sortX
      • sortY
      • stackEnter
      • stackY
      • symmetryY
    • 坐标系(Coordinate)
      • 概览
      • fisheye
      • parallel
      • polar
      • theta
      • transpose
      • radial
      • cartesian3D
      • helix
    • 样式(Style)
    • 动画(Animate)
      • 概览
      • fadeIn
      • fadeOut
      • growInX
      • growInY
      • morphing
      • pathIn
      • scaleInX
      • scaleInY
      • scaleOutX
      • scaleOutY
      • waveIn
      • zoomIn
      • zoomOut
    • 状态(State)
    • 交互(Interaction)
      • 概览
      • brushAxisHighlight
      • brushHighlight
      • brushXHighlight
      • brushYHighlight
      • brushFilter
      • brushXFilter
      • brushYFilter
      • chartIndex
      • elementHighlight
      • elementHighlightByColor
      • elementHighlightByX
      • elementSelect
      • elementSelectByColor
      • elementSelectByX
      • fisheye
      • legendFilter
      • legendHighlight
      • poptip
      • scrollbarFilter
      • sliderFilter
    • 复合(Composition)
      • 概览
      • facetCircle
      • facetRect
      • repeatMatrix
      • spaceFlex
      • spaceLayer
      • timingKeyframe
    • 主题(Theme)
      • 概览
      • academy
      • classic
      • classicDark
    • 事件(Event)
    • 颜色映射(Color)
  • 图表 API
  • 图表组件
    • 标题(Title)
    • 坐标轴(Axis)
    • 图例(Legend)
    • 滚动条(Scrollbar)
    • 缩略轴(Slider)
    • 提示信息(Tooltip)
    • 数据标签(Label)
  • 进阶主题
    • 关系图(Graph)
      • forceGraph
      • pack
      • sankey
      • tree
      • treemap
    • 地图(Geo)
      • geoPath
      • geoView
    • 3D 图表(3D Chart)
      • 绘制 3D 图表
      • point3D
      • line3D
      • interval3D
      • surface3D
    • 插件扩展(Plugin)
      • renderer
      • rough
      • lottie
      • a11y
    • 按需打包
    • 设置纹理
    • 服务端渲染(SSR)
    • Spec 函数表达式支持 (5.3.0 支持)
  • 版本特性
    • 新版本特性
    • v4 升级 v5 指南
  • 常见问题 FAQ

提示信息(Tooltip)

上一篇
缩略轴(Slider)
下一篇
数据标签(Label)

Resources

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

概述

Tooltip 是图表交互的核心组件之一,用于动态展示数据点的详细信息,帮助用户快速理解图表中特定区域的数值、分类或其他维度信息。它能够在鼠标悬停、点击或移动到图表中的某个元素(如柱状图中的柱子、折线图中的数据点)时,动态显示相关的数据信息。

  • 显示详细信息:Tooltip 可以显示有关数据点的详细信息,例如具体数值、百分比或其他相关属性。这有助于用户更深入地了解数据。
  • 提高可读性:在复杂的可视化中,Tooltip 可以帮助用户更容易地识别和理解数据点。例如,在散点图中,当数据点密集时,Tooltip 可以显示特定点的详细信息,而无需将鼠标悬停在每个点上。
  • 增强交互性:Tooltip 可以增强可视化的交互性。用户可以通过悬停或点击数据点来查看更多信息,这使得可视化更加动态和有趣。
  • 突出显示关键信息:Tooltip 可以用来突出显示关键信息。例如,在时间序列图中,您可以使用 Tooltip 显示特定时间点的重要事件或突变。
  • 支持多种触发方式:可以通过鼠标悬停(hover)、点击(click)、触摸(touch)等事件触发显示。

构成元素

tooltip

使用方式

chart.options({
type: 'interval',
tooltip: {
title: 'name', // 标题
items: ['genre'], // 数据项
},
});

并且结合 view.interaction.tooltip 去配置提示信息的渲染和额外配置。

chart.options({
type: 'view',
interaction: {
tooltip: { series: true },
},
});

当该视图中只有一个标记的时候,通过 mark.interaction.tooltip 配置提示信息的渲染和额外配置也是可以的。

chart.options({
type: 'line',
interaction: {
tooltip: { series: true },
},
});

如果希望不展示该 tooltip 的提示信息,可以通过下面的配置关闭。

chart.options({
type: 'interval',
tooltip: false,
});

如果希望图表没有提示信息交互,可以通过 chart.interaction 实现。

chart.options({
type: 'view',
interaction: { tooltip: false },
});

尝试一下

配置项

配置项分为两个部分

  • tooltip 是 G2 中用于展示数据点的详细信息的一个 UI 组件。当用户将鼠标悬停在图表的某个数据点上时,tooltip 会显示该数据点的相关信息,比如坐标值、度量值等。

  • interaction.tooltip 是 G2 的交互机制的一部分,属于 interaction(交互)模块。它是一种内置的交互行为,用于增强工具提示的功能,特别是在某些特定的交互场景下(如动态显示或隐藏工具提示)。

tooltip 和 interaction.tooltip 中的 tooltip 是两个不同维度的配置,但容易混淆。以下是它们的核心区别:

特性tooltipinteraction.tooltip
职责定义工具提示的内容、样式和基本行为定义工具提示在交互场景下的行为
配置方式通过 chart.tooltip() 配置通过 chart.interaction() 启用或自定义
作用范围全局生效,影响整个图表与特定交互行为绑定
典型用途设置工具提示的字段、样式、内容等控制工具提示的动态显示/隐藏或其他交互逻辑

tooltip

属性描述类型默认值适用于
title设置tooltip的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,将该值作为 title。详见title 配置title
nodeTitle设置复合图形tooltip标题的节点title属性title桑基图等复合图形
linkTitle设置复合图形tooltip标题的弦title属性title桑基图等复合图形
items指定tooltip中显示的字段,默认不同图表有不同的默认字段列表。配合 channel 配置一起使用,效果更佳。详见items 配置items
nodeItems设置复合图形tooltip标题的节点items属性items桑基图等复合图形
linkItems设置复合图形tooltip标题的弦items属性items桑基图等复合图形

title

title是一个用于显示当前悬停数据点的 主标题 的字段,通常用于表示数据点所属的分类或上下文信息。

title可以直接写入一个固定显示的字符串,或者一个方法从data中动态获取标题

chart.options({
type: 'interval',
tooltip: {
title: (d) => (d.sold > 150 ? 'high' : 'low'), // 设置 title
},
});

在不需要自定义 title 的时候,可以直接声明 tooltip 为一个数组,此时的 title 将会使用默认配置:

chart.options({
type: 'interval',
tooltip: ['genre', 'sold'],
});

其中完整的 title 结构如下:

细分配置项名称类型功能描述
channelstring定义生成 title 的通道
fieldstring定义生成 title 的的字段
valuestringtitle 的值
valueFormatterstring | Function格式化 title
  • 字段

它们的值(value)可以通过来自原始数据,通过字符串或者 title.field 指定。

chart.options({
tooltip: {
title: 'sold',
items: ['genre'],
},
});
// 等价于
chart.options({
tooltip: {
title: { field: 'sold' },
items: [{ field: 'genre' }],
},
});
  • 通道

它们的值(value)可以来自通道值,通过 title.channel 指定,常常用于使用 mark.transform 生成新通道的图表。

chart.options({
tooltip: {
title: { channel: 'x' },
items: [{ channel: 'y' }],
},
});
  • 格式化

可以通过 title.valueFormatter 去指定 title 值(value)的展示,title.valueFormatter 可以是一个函数,也可以一个 d3-format 支持的字符串。

chart.options({
tooltip: {
title: {field: 'sold', valueFormatter: (sold) => sold.toUpperCase()}
items: [{ channel: 'y', valueFormatter: '.0%' }],
},
});
  • 个性化配置

当然对于 title 还提供了回调去获得最大的个性化配置能力。

chart.options({
tooltip: {
title: (datum, index, data, column) => ({
value: `<span style="color: #00ff00; font-style: italic;">${d.letter}</span>`,
custom: ...
}),
items: [
(datum, index, data, column) => ({
color: d.sold > 150 ? 'red' : 'blue', // 指定 item 的颜色
name: index === 0 ? d.genre : `${d.genre} ${data[index].genre}`, // 指定 item 的名字
value: column.y.value[index], // 使用 y 通道的值、
custom: ...
}),
],
},
});

items 返回值可用作 interaction.tooltip.render 的入参,您可以设置一些自定义参数。详见自定义渲染内容

复合图形配置

复合图形在配置tooltip.title 时需要分别配置节点与弦

({
tooltip: {
nodeTitle: (d) => d.key,
linkTitle: (d) => 'link',
},
});

items

items 是 tooltip 配置中的一个关键属性,items 是一个数组,表示工具提示中每一项的内容。每一项通常对应于一个数据字段或一个图形元素(例如柱状图的一根柱子、折线图的一个点等)。通过自定义 items,可以灵活地控制工具提示的显示内容,包括名称、值、颜色等信息。

其中完整的 title 结构如下:

细分配置项名称类型功能描述
colorstringmarker 的颜色
fieldstring定义生成 item 的的字段
namestringitem 的名字
valuestringitem 的值
channelstring定义生成 item 的值的通道
valueFormatterstring | Function格式化 item

items 的 value、channel、valueFormatter属性的配置方式与title一致,详细配置请参考title

名称

通过name可以便捷的修改tooltip中item的名字,通过channel来匹配图标中对应的条目。

chart.options({
tooltip: {
items: [
{name: '张三', channel: 'y1'},
{name: '李四', channel: 'y2'},
],
},
});

颜色

tooltip会自动根据图标内容分配tooltip item的颜色,但是实际应用中,可能需要根据一些规则来指定某些颜色,此时就可以通过color属性来配置。通过channel来匹配图标中对应的条目。

chart.options({
tooltip: {
items: [
{color: 'pink', channel: 'y1'},
{color: '#f00', channel: 'y2'},
],
},
});

复合图形配置

复合图形在配置tooltip.items 时需要分别配置节点与弦

({
tooltip: {
nodeItems: [
(datum, index, data, column) => {
return {
color: 'red', // 指定 item 的颜色
name: '节点', // 指定 item 的名字
value: d.key, // 使用 y 通道的值
content: '节点自定义属性',
};
},
],
linkItems: [
(datum, index, data, column) => {
return {
color: 'red', // 指定 item 的颜色
name: '连接线', // 指定 item 的名字
value: `${d.source.key}-${d.target.key}`, // 使用 y 通道的值
content: '连接线自定义属性',
};
},
],
},
});

interaction.tooltip

属性描述类型默认值适用于
body是否展示 tooltipbooleantrue
bounding控制 tooltip 提示框的显示边界,超出会自动调整位置{ x: number, y: number, width: number, height: number }图表区域大小
css设置 tooltip 的 css 样式css-
crosshairs配置十字辅助线 crosshairs 的样式crosshairs详见 crosshairs
disableNative禁用原生的 pointerover 和 pointerout 事件,需要自定义 tooltip 交互的时候需要设置为 truebooleanfalse
enterabletooltip 是否允许鼠标滑入booleanfalse
facet是否是分面图的 tooltipbooleanfalse分面复合图表
filteritem 筛选器(d: TooltipItemValue) => any-
groupName是否使用 groupNamebooleantrue
leading是否在时间间隔开始的时候更新提示信息booleantrue
marker配置标记点 marker 的样式marker详见 marker
markerTypemarkerType 用于控制显示提示信息时,选中标记点(Marker)的样式是空心还是实心,默认为实心,配置为'hollow'则为空心'hollow' | undefinedundefined
mount指定提示框的挂载节点string | HTMLElement图表容器
position设置 tooltip 的固定展示位置,相对于数据点'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right''right-bottom'
offset在位置方向上的偏移量[number, number][10, 10]
render自定义渲染 tooltip 内容(event, options) => HTMLElement | string-
series是否是系列元素的 tooltipbooleanfalse多条折线、多组柱状图
shared相同 x 的元素是否共享 tooltipbooleanfalse
sortitem 排序器(d: TooltipItemValue) => any-
trailing是否在时间间隔结束的时候更新提示信息booleanfalse
wait提示信息更新的时间间隔,单位为毫秒number50

crosshairs

crosshairs 是提示框(Tooltip)的辅助线功能,用于在图表中标记当前数据点的精确位置,主要用于连续图形,例如折线图、面积图。通常以横向或纵向的参考线形式呈现,帮助用户更直观地定位数据。

另外,通过前缀crosshairsX 和 crosshairsY 设置样式的优先级比 crosshairs高,会覆盖后者。

属性描述类型默认值必选
crosshairs是否显示十字辅助线booleantrue
crosshairsStroke十字辅助线描边颜色string-
crosshairsStrokeOpacity十字辅助线透明度number-
crosshairsLineWidth十字辅助线宽度number-
crosshairsLineDash十字辅助线虚线[number,number]-
crosshairsX是否显示水平方向辅助线booleanfalse
crosshairsXStroke水平方向辅助线描边颜色string-
crosshairsXStrokeOpacity水平方向辅助线透明度number-
crosshairsXLineWidth水平方向辅助线宽度number-
crosshairsXLineDash水平方向辅助线虚线[number,number]-
crosshairsY是否显示垂直方向辅助线booleantrue
crosshairsYStroke垂直方向辅助线描边颜色string-
crosshairsYStrokeOpacity垂直方向辅助线透明度number-
crosshairsYLineWidth垂直方向辅助线宽度number-
crosshairsYLineDash垂直方向辅助线虚线[number,number]-
chart.options({
interaction: {
legendFilter: false,
elementPointMove: true,
tooltip: {
crosshairs: true, // 启用十字辅助线
crosshairsStroke: 'red', // 辅助线颜色为红色
crosshairsYStroke: 'yellow', // 垂直方向辅助线颜色单独设置为黄色
crosshairsLineDash: [4, 4], // 辅助线为虚线样式
markerType: 'hollow', // 提示框标记点为空心
},
},
});

marker

属性描述类型默认值必选
marker是否展示标记点booleantrue
markerFill标记点填充颜色string-
markerFillOpacity标记点填充透明度number-
markerStroke标记点描边颜色string-
markerStrokeOpacity标记点描边透明度number-
markerLineWidth标记点描边宽度number-
markerLineDash标记点虚线配置[number,number]-
markerOpacity标记点整体透明度number-
markerShadowColor标记点阴影颜色string-
markerShadowBlur标记点阴影模糊系数number-
markerShadowOffsetX标记点阴影水平偏移number-
markerCursor标记点鼠标样式stringdefault
chart.options({
interaction: {
tooltip: {
marker: true,
markerType: 'hollow', // 提示框标记点为空心
markerStroke: 'yellow',
markerLineWidth: 2,
markerLineDash: [4, 4],
},
},
});

设置样式

tooltip 的 cssStyle 配置项允许通过 CSS 样式直接自定义提示框的外观, 可快速实现提示框的视觉定制,适配不同主题或交互场景需求。

tooltip

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
});
chart.options({
type: 'interval',
data: {
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv',
format: 'csv',
},
encode: {
x: 'state',
y: 'population',
color: 'age',
},
transform: [
{ type: 'sortX', by: 'y', reverse: true, reducer: 'sum', slice: 6 },
{ type: 'dodgeX' },
],
legend: false,
interaction: {
tooltip: {
shared: true,
mount: 'body',
css: {
'.g2-tooltip': {
background: '#eee',
'border-radius': ' 0.25em !important',
},
'.g2-tooltip-title': {
'font-size': '20px',
'font-weight': 'bold',
'padding-bottom': '0.25em',
},
'.g2-tooltip-list-item': {
background: '#ccc',
padding: '0.25em',
margin: '0.25em',
'border-radius': '0.25em',
},
'.g2-tooltip-list-item-name-label': {
'font-weight': 'bold',
'font-size': '16px',
},
'g2-tooltip-list-item-marker': {
'border-radius': '0.25em',
width: '15px',
height: '15px',
},
'.g2-tooltip-list-item-value': {
'font-weight': 'bold',
'font-size': '16px',
},
},
},
},
});
chart.render();

尝试一下

自定义渲染内容

有时候内置的 Tooltip 无法满足需求,这时候可以通过 mark.interaction.tooltip.render 或者 view.interaction.tooltip.render 的 render 函数来渲染自定义的提示。

该 render 函数接受事件对象 event 和提示数据 tooltipData,返回一个 string 或者 DOM 对象。其中 event 是 @antv/g 抛出的鼠标对象,tooltipData 是通过 mark.tooltip 声明的 title 和 items 数据。如果返回值是一个 string,那么会作为 tooltip 容器的 innerHTML,否则会挂载该返回值。一个提示的 render 函数的定义大概如下:

function render(event, tooltipData) {
const { title, items } = tooltipData;
return `<div></div>`;
}

下面是一个简单的例子:

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
});
chart
.interval()
.data({
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',
})
.transform([{ type: 'sortX', by: 'y', reverse: true }])
.encode('x', 'letter')
.encode('y', 'frequency')
.interaction('tooltip', {
// render 回调方法返回一个innerHTML 或者 DOM
render: (event, { title, items }) => `<div>
<h3 style="padding:0;margin:0">${title}</h3>
<ul>${items.map(
(d) =>
`<li><span style="color: ${d.color}">${d.name}</span> ${d.value}</li>`,
)}</ul>
</div>`,
});
chart.render();

事件

chart.on() 方法将指定的监听器注册到 chart 上,当该对象触发指定的事件时,指定的回调函数就会被执行。

以下是如何配置配置 tooltip 显示隐藏事件的示例:

chart.on('tooltip:show', (event) => {
console.log(event.data.data);
});
chart.on('tooltip:hide', () => {
console.log('hide');
});

尝试一下

示例

title

mark.tooltip({
title: 'name', // 字段
});
mark.tooltip({
title: (d) => (d.value > 100 ? d.name : d.age), // transform
});

item

// 单个字段
mark.tooltip('a');
mark.tooltip({ field: 'a' });
// 单个通道
mark.tooltip({ channel: 'y' });
// transform
mark.tooltip((d) => (d.value > 100 ? d.name : d.age));
// 格式化
mark.tooltip({ channel: 'y', valueFormatter: (d) => d.toFixed(1) });
// d3-format 支持的字符
// https://github.com/d3/d3-format
mark.tooltip({ channel: 'y', valueFormatter: '~s' });
// 完整信息
mark.tooltip({ name: 'name', color: 'red', value: 'color' });
// 回调
mark.tooltip(
(
d, // 每一个数据项
index, // 索引
data, // 完整数据
column, // 通道
) => ({
value: `${column.y.value[index]} - ${column.y1.value[index]}`,
}),
);
// 多个 item
mark.tooltip({ channel: 'y' }).tooltip({ channel: 'x' });

title + item

mark.tooltip({
title: 'a',
items: [{ channel: 'x' }, { channel: 'y' }],
});

怎么将 data 中额外的数据作为自定义 render 函数的参数

render 函数提供了强大的个性化配置能力,通过对tooltip.render函数返回参数的配置,自定义interaction.tooltip.render的入参

chart.options({
tooltip: {
items: [
(datum, index, data, column) => ({
color: d.sold > 150 ? 'red' : 'blue', // 指定 item 的颜色
name: index === 0 ? d.genre : `${d.genre} ${data[index].genre}`, // 指定 item 的名字
value: column.y.value[index], // 使用 y 通道的值、
custom1: '自定义参数1',
custom2: '自定义参数2'
}),
],
},
interaction: {
tooltip: {
// render 回调方法返回一个innerHTML 或者 DOM
render: (event, { title, items }) => {
return `<div>
<h3 style="padding:0;margin:0">${title}</h3>
<ul>${items.map(
({ color, name, value, custom1, custom2 }) => ...
)}</ul>
</div>`,
}
}
}
});

手动控制展示/隐藏

对于 Interval、Point 等非系列 Mark,控制展示的方式如下:

// 条形图、点图等
chart
.interval()
.data([
{ genre: 'Sports', sold: 275 },
{ genre: 'Strategy', sold: 115 },
{ genre: 'Action', sold: 120 },
{ genre: 'Shooter', sold: 350 },
{ genre: 'Other', sold: 150 },
])
.encode('x', 'genre')
.encode('y', 'sold')
.encode('color', 'genre');
chart.render().then((chart) =>
chart.emit('tooltip:show', {
offsetX: 10, // 相对于 plot 区域的位置
offsetX: 20, // 相对于 plot 区域的位置
data: {
data: { genre: 'Sports' }, // 会找从原始数据里面找到匹配的数据
},
}),
);

对于 Line、Area 等系列 Mark,控制展示的方式如下:

chart
.line()
.data({ type: 'fetch', value: 'data/aapl.csv' })
.encode('x', 'date')
.encode('y', 'close');
// 根据数据拾取
chart.render((chart) =>
chart.emit('tooltip:show', {
data: {
data: { x: new Date('2010-11-16') },
},
}),
);
// 根据像素拾取
chart.render((chart) =>
chart.emit('tooltip:show', {
offsetX: 200,
offsetY: 200,
}),
);

隐藏的方式如下:

chart.emit('tooltip:hide');

开始/禁止交互

chart.emit('tooltip:disable'); // 禁用 tooltip
chart.emit('tooltip:enable'); // 启用交互

设置十字辅助线

默认情况下,crossharisY是开启的,crosshairsX是关闭的,所以如果要开启十字辅助线,有以下两种方式。

  1. 设置crosshairs为true。
chart.interaction('tooltip', {
crosshairs: true, // 开启十字辅助线
crosshairsXStroke: 'red', // 设置 X 轴辅助线颜色为'red'
crosshairsYStroke: 'blue', // 设置 Y 轴辅助线颜色为'blue'
});
  1. 设置crosshairsX为true。
chart.interaction('tooltip', {
crosshairsX: true, // 开启crosshairsX辅助线
crosshairsXStroke: 'red', // 设置 X 轴辅助线颜色为'red'
crosshairsYStroke: 'blue', // 设置 Y 轴辅助线颜色为'blue'
});

crosshairsX的优先级大于crosshairs的优先级。

example

设置提示点为空心圆

chart.interaction('tooltip', {
markerType: 'hollow', // 设置提示点的样式为空心圆
});
example

桑基图这种复合图形怎么使用 data 中的补充属性实现自定义 tooltip 的展示?

和一般Mark自定义tooltip交互的方法类似,先在图形的tooltip.render里返回自定义属性,然后在interaction.render里使用。

({
type: 'sankey',
data: {
value: {
nodes: [
{ id: 'a', key: '首页', des: '节点自定义属性' },
{ id: 'b', key: '页面1', des: '节点自定义属性' },
{ id: 'b_1', key: '页面1', des: '节点自定义属性' },
{ id: 'c', key: '页面2', des: '节点自定义属性' },
{ id: 'c_1', key: '页面2', des: '节点自定义属性' },
{ id: 'd', key: '页面3', des: '节点自定义属性' },
{ id: 'd_1', key: '页面3', des: '节点自定义属性' },
],
links: [
{ source: 'a', target: 'b', value: 100 },
{ source: 'b', target: 'c', value: 80 },
{ source: 'b', target: 'd', value: 20 },
{ source: 'c', target: 'b_1', value: 80 },
{ source: 'b_1', target: 'c_1', value: 40 },
{ source: 'b_1', target: 'd_1', value: 40 },
],
},
transform: [
{
type: 'custom',
callback: (data) => ({
nodes: data.nodes,
links: data.links,
}),
},
],
},
tooltip: {
nodeItems: [
(datum, index, data, column) => {
return {
content: d.des,
};
z;
},
],
linkItems: [
(datum, index, data, column) => {
return {
color: 'red', // 指定 item 的颜色
name: '连接线', // 指定 item 的名字
value: `${d.source.key}-${d.target.key}`, // 使用 y 通道的值
content: '连接线自定义属性',
};
},
],
},
layout: {
nodeId: (d) => d.id,
nodeAlign: 'center',
nodePadding: 0.03,
iterations: 25,
},
style: {
labelSpacing: 3,
labelFontWeight: 'bold',
linkFillOpacity: 0.2,
linkFill: '#3F96FF',
},
interaction: {
tooltip: {
render: (e, { items, title }) => {
return `<div>${items[0].content}</div>`;
},
},
},
});