logo

Ant Design Charts

  • Manual
  • Options
  • Examples
  • Productsantv logo arrow
  • 2.0.0
  • Component Overview
  • Common Configuration Statistical Charts
    • Chart composition
    • Component
      • 标题(Title)
      • Axis
      • Legend
      • Scrollbar
      • Slider
      • Tooltip
      • Label
    • Core
      • Color En
      • View
      • Data
        • overview
        • custom
        • ema
        • fetch
        • filter
        • fold
        • inline
        • join
        • kde
        • log
        • map
        • pick
        • rename
        • slice
        • sort
        • sortBy
      • Scale
        • overview
        • band
        • linear
        • log
        • ordinal
        • point
        • pow
        • quantile
        • quantize
        • sqrt
        • threshold
        • time
      • Transform
        • overview
        • bin
        • binX
        • diffY
        • dodgeX
        • flexX
        • group
        • groupColor
        • groupX
        • groupY
        • jitter
        • jitterX
        • jitterY
        • normalizeY
        • pack
        • sample
        • select
        • selectX
        • selectX
        • sortColor
        • sortX
        • sortY
        • stackEnter
        • stackY
        • symmetryY
      • Coordinate
        • overview
        • fisheye
        • parallel
        • polar
        • radial
        • theta
        • transpose
        • cartesian3D
      • 样式(Style)
      • Animate
        • overview
        • fadeIn
        • fadeOut
        • growInX
        • growInY
        • morphing
        • pathIn
        • scaleInX
        • scaleInY
        • scaleOutX
        • scaleOutY
        • waveIn
        • zoomIn
        • zoomOut
      • 状态(State)
      • Interaction
        • Overview
        • brushAxisHighlight
        • brushHighlight
        • brushXHighlight
        • brushYHighlight
        • brushFilter
        • brushXFilter
        • brushYFilter
        • chartIndex
        • elementHighlight
        • elementHighlightByColor
        • elementHighlightByX
        • elementSelect
        • elementSelectByColor
        • elementSelectByX
        • fisheye
        • legendFilter
        • legendHighlight
        • poptip
        • scrollbarFilter
        • sliderFilter
      • Composition
        • overview
        • facetCircle
        • facetRect
        • repeatMatrix
        • spaceFlex
        • spaceLayer
        • timingKeyframe
      • Theme
        • overview
        • Academy
        • classic
        • classicDark
      • event
    • Specal Plot
      • Area
      • Bar
      • CirclePacking
      • DualAxes
      • Gauge
      • Line
      • Rose
      • Sankey
      • Scatter
      • Sunburst
      • Treemap
      • Venn
      • WordCloud
      • Column
      • Pie
      • BidirectionalBar
      • Box
      • Bullet
      • Funnel
      • Heatmap
      • Histogram
      • Liquid
      • Radar
      • Stock
      • Tiny
      • Violin
      • Waterfall
      • RadialBar
  • Relation Graph Components
    • Overview
    • MindMap
    • Fishbone
    • IndentedTree
    • Dendrogram
    • OrganizationChart
    • FlowGraph
    • FlowDirectionGraph
    • NetworkGraph
    • FAQ

更多

Next
Component Overview

Resources

Ant Design
Galacea Effects
Umi-React Application Framework
Dumi-Component doc generator
ahooks-React Hooks Library

Community

Ant Financial Experience Tech
seeconfSEE Conf-Experience Tech Conference

Help

GitHub
StackOverflow

more productsMore Productions

Ant DesignAnt Design-Enterprise UI design language
yuqueYuque-Knowledge creation and Sharing tool
EggEgg-Enterprise-class Node development framework
kitchenKitchen-Sketch Tool set
GalaceanGalacean-互动图形解决方案
xtechLiven Experience technology
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

通用配置

为了更好地使用 Ant Design Charts 进行数据可视化,我们需要了解 Ant Design Charts 图表的组成以及相关概念。

图表组件

下面是一个基本的 Ant Design Charts 图表,图表由 组件(Component) 和 标记(Mark) 组成。

需要特别注意的是,Ant Design Charts 5.0 中不再需要单独配置标注(Annotation) ,标注也是一种标记,或者说某些标记也也可以用来做标注,比如 Text,Image, Line 等标记。

chart-component

标题 title

用于一句话概要说明图表要展示的数据,图表的标题是比较常用的组件,支持标题和副标题,以及他们的样式和位置设置。

查看 Title 教程获取更多信息。

坐标轴 axis

绘制坐标轴,目前支持直角坐标系坐标轴与极坐标系坐标轴。

每个坐标轴由坐标轴线(line)、刻度(tick)、刻度值(label)、标题(title)以及网格线(grid)组成。

查看 Axis 教程获取更多信息。

图例 legend

绘制图例,Ant Design Charts 提供了两种图例类型:分类图例(Category Legend)和连续图例(Continuous Legend),分别用于展示分类数据和连续数据。

查看 Legend 教程获取更多信息。

滚动条 scrollbar

滚动条(scrollbar)是一个交互组件,当显示区域大小不足以容纳全部信息时,可以将超出部分隐藏,并通过滚动条的垂直或横向滑动来显示出被隐藏部分。

内容是否超出显示区域取决于内容的多少以及显示区域的尺寸,当需要显示的内容在纵向方向上超过显示区域的大小时,应当使用垂直滚动条以控制显示的部分,横向滚动条同理。

查看 Scrollbar 教程获取更多信息。

缩略轴 slider

缩略轴(slider)是一种辅助看数据的组件,它将大量数据浓缩到一个轴上,既可以缩小宏观看数据全貌,又可以放大微观看数据的片段,同时还可以拖拽观察数据在一定区间内的演变。

缩略轴是值域数据的浓缩,它跟位置通道 x, y 对应的比例尺的类型息息相关。一般来说时间类型上使用缩略轴的频率高,连续轴使用缩略轴频次低、分类轴几乎不会使用到缩略轴。

查看 Slider 教程获取更多信息。

提示信息 tooltip

当鼠标悬停在某个点上时,会以提示框的形式显示当前点对应的数据的信息,比如该点的值,数据单位等。数据提示框内提示的信息还可以通过格式化函数动态指定。

查看 Tooltip 教程获取更多信息。

数据标签 label

Ant Design Charts 中数据标签(Label) 是给图表添加标注的手段之一。

查看 Label 教程获取更多信息。

图表布局

使用方式

不管是单视图图表还是多视图图表,布局信息(图表宽高等)都可以在选项顶层进行指定。

const markLevel = {
width: 640,
height: 180,
margin: 10,
};
const viewLevel = {
type: 'view',
width: 640,
height: 180,
margin: 10,
// ...
};
const compositionLevel = {
type: 'spaceFlex',
width: 640,
height: 180,
margin: 10,
};

同时,也可以在初始化 Chart 对象的时候指定:

也可以通过 node.attr 指定:

{
"attr": {
"margin": 20,
"padding": 10
}
}

视图模型

chart-component

在 Ant Design Charts 中,视图模型 用于定义图表视图的划分方式,根据划分生成的不同区域可以绘制不同的内容,并通过相应选项进行配置。可以将视图简单理解为一个独立的图表。Ant Design Charts 的视图模型结构如下:

  • 视图区域(View Area):表示图表的整体视图区域。在设置图表的宽度和高度时,生效的范围即为视图区域的宽度和高度。视图区域与绘制区域之间的部分称为 外边距范围,该区域的大小可通过配置 margin 属性进行调整,通常用于设置固定组件(如坐标轴、图例等)与边界的距离。

  • 绘制区域(Plot Area):表示图表的绘制区域。绘制区域与主区域之间的部分称为 内边距范围,该区域的大小可通过配置 padding 属性进行调整,通常用于绘制图表组件,例如title、legend、axis等。

  • 主区域(Main Area):表示图表内容绘制的主要区域。主区域与内容区域之间的部分称为 呼吸范围,该区域的大小可通过配置 inset 属性进行调整,用于制造组件和标记(图形元素)的间距,从而防止重叠,对于散点图尤其有用。

  • 内容区域(Content Area):表示标记绘制的内容区域。主要用于绘制标记(图形元素)。

其中内容区域的大小由以下的公式得到:

const contentWidth = width - paddingLeft - paddingRight - marginLeft - marginRight - insetLeft - insetRight;
const contentHeight = height - paddingTop - paddingBottom - marginTop - marginBottom - insetTop - insetBottom;

布局算法

Ant Design Charts 在内部自己实现了一套布局算法,负责协调外边距( margin )、内边距( padding )、呼吸范围宽度( inset )等布局参数的计算,确保坐标轴、图例等组件在图表容器中合理布局。

动态计算

也许你曾经有过疑惑,为什么在配置里手动声明 padding 为 0, 图表的 x 轴显示不全了。要回答这个问题,需要深入探究 Ant Design Charts 布局算法里动态计算的部分。

在 Ant Design Charts 的布局算法中,首先会获取所有传入的 padding、margin、inset属性,如果没有设置,padding(包括 paddingTop、paddingLeft 等)会被默认赋值为 auto,margin 会被默认赋值为 16,而 inset 会被默认赋值为 0。接下来将图表组件按照位置进行分组,方便后续布局计算。

以 position = 'top' 为例,如果配置了明确的 paddingTop 时,不会触发动态计算 paddingTop 的逻辑,此时对于未定义 size 的组件,使用内部定义的默认尺寸 defaultSize;对于分组(group)组件,递归执行上述操作,然后取最大的子组件尺寸作为父组件的尺寸;如果组件中包括坐标轴(axis)组件且未显式设置 labelAutoHide,设置 labelAutoHide 为 true,自动隐藏坐标轴标签以避免溢出。

如果没有配置 paddingTop,则会触发动态计算的逻辑,根据组件的实际尺寸累加边距(crossPadding 默认为 12),得出最后的实际paddingTop 大小。

要回答最初的问题:在 Ant Design Charts 中,内边距范围( padding )用于为图表组件预留展示空间。如果手动将 padding 设置为 0 ,会关闭内部的自适应计算逻辑,从而可能导致图表组件显示不完整。因此,当需要个性化配置时,应确保为组件预留足够的空间;否则,建议使用默认的自适应逻辑来避免显示问题。

防挤压机制

Ant Design Charts 内部对于图表显示区域设置了一个兜底机制,当视图中存在标记元素(如line、interval等),触发防挤压机制,来确保图表的主区域(Main Area)最小占比 1/4 。以水平方向为例,假设绘制区域的大小为 plotWidth,如果 plotWidth 减去动态计算后的左内边距 pl0 和 右内边距 pr0 后小于 plotWidth * 1/4 时,会优先保证主区域大小为 plotWidth * 1/4,将内边距等比例缩小,当用户指定 paddingLeft 时会动态计算 paddingRight 的大小,按比例分配剩余空间,尽量避免左右外边距同时设置为固定值,可能会导致自适应算法失效。垂直方向的计算规则同理。

配置项

属性描述类型默认值必选
autoFit开启后图表的宽高和容器保持一致booleanfalse
width设置图表的宽度number640
height设置图表的高度number480
viewStyle设置图表的视图样式viewStyle详见 viewStyle
margin设置外边距四个方向的值,优先级别比分别设置低number16
marginLeft设置左外边距值number16
marginTop设置上外边距值number16
marginRight设置右外边距值number16
marginBottom设置下外边距值number16
padding设置内边距四个方向的值,优先级别比分别设置低numberauto
paddingLeft设置左内边距值numberauto
paddingTop设置上内边距值numberauto
paddingRight设置右内边距值numberauto
paddingBottom设置下内边距值numberauto
inset设置呼吸范围四个方向的值,优先级别比分别设置低number0
insetLeft设置左呼吸范围宽度number0
insetTop设置上呼吸范围宽度number0
insetRight设置右呼吸范围宽度number0
insetBottom设置下呼吸范围宽度number0

autoFit

如果希望图表的宽高和容器保持一致,那么可以将 options.autoFit 设置为 true,其优先级比指定宽高高。

viewStyle

配置图表的视图样式。

属性描述类型默认值必选
view配置视图区域的样式view详见 view
plot配置绘制区域的样式plot详见 plot
main配置主区域的样式main详见 main
content配置内容区域的样式content详见 content
view

配置图表的视图区域的样式。

属性描述类型默认值必选
viewRadius图表的视图区域的四个圆角半径大小number0
viewFill图表的视图区域填充颜色string-
viewFillOpacity图表的视图区域填充透明度number-
viewStroke图表的视图区域描边颜色string-
viewStrokeOpacity图表的视图区域描边透明度number-
viewLineWidth图表的视图区域描边宽度number-
viewLineDash图表的视图区域描边虚线配置[number,number]-
viewOpacity图表的视图区域整体透明度number-
viewShadowColor图表的视图区域阴影颜色string-
viewShadowBlur图表的视图区域阴影模糊系数number-
viewShadowOffsetX图表的视图区域阴影水平偏移number-
viewShadowOffsetY图表的视图区域阴影垂直偏移number-
viewCursor图表的视图区域鼠标样式stringdefault
plot

配置图表的绘制区域的样式。

属性描述类型默认值必选
plotRadius图表的绘制区域的四个圆角半径大小number0
plotFill图表的绘制区域填充颜色string-
plotFillOpacity图表的绘制区域填充透明度number-
plotStroke图表的绘制区域描边颜色string-
plotStrokeOpacity图表的绘制区域描边透明度number-
plotLineWidth图表的绘制区域描边宽度number-
plotLineDash图表的绘制区域描边虚线配置[number,number]-
plotOpacity图表的绘制区域整体透明度number-
plotShadowColor图表的绘制区域阴影颜色string-
plotShadowBlur图表的绘制区域阴影模糊系数number-
plotShadowOffsetX图表的绘制区域阴影水平偏移number-
plotShadowOffsetY图表的绘制区域阴影垂直偏移number-
plotCursor图表的绘制区域鼠标样式stringdefault
main

配置图表的主区域的样式。

属性描述类型默认值必选
mainRadius图表的主区域的四个圆角半径大小number0
mainFill图表的主区域填充颜色string-
mainFillOpacity图表的主区域填充透明度number-
mainStroke图表的主区域描边颜色string-
mainStrokeOpacity图表的主区域描边透明度number-
mainLineWidth图表的主区域描边宽度number-
mainLineDash图表的主区域描边虚线配置[number,number]-
mainOpacity图表的主区域整体透明度number-
mainShadowColor图表的主区域阴影颜色string-
mainShadowBlur图表的主区域阴影模糊系数number-
mainShadowOffsetX图表的主区域阴影水平偏移number-
mainShadowOffsetY图表的主区域阴影垂直偏移number-
mainCursor图表的主区域鼠标样式stringdefault
content

配置图表的内容区域的样式。

属性描述类型默认值必选
contentRadius图表的内容区域的四个圆角半径大小number0
contentFill图表的内容区域填充颜色string-
contentFillOpacity图表的内容区域填充透明度number-
contentStroke图表的内容区域描边颜色string-
contentStrokeOpacity图表的内容区域描边透明度number-
contentLineWidth图表的内容区域描边宽度number-
contentLineDash图表的内容区域描边虚线配置[number,number]-
contentOpacity图表的内容区域整体透明度number-
contentShadowColor图表的内容区域阴影颜色string-
contentShadowBlur图表的内容区域阴影模糊系数number-
contentShadowOffsetX图表的内容区域阴影水平偏移number-
contentShadowOffsetY图表的内容区域阴影垂直偏移number-
contentCursor图表的内容区域鼠标样式stringdefault

在配置视图样式的时候,不是以对象的形式来配置,而是以 view、plot、main、content前缀加属性的方式来配置。

({
viewStyle: {
// 配置图表的视图区域的样式
viewFill: '#DCEEFE',
viewRadius: 50,
// 配置图表的绘制区域的样式
plotFill: '#fff',
plotFillOpacity: 0.45,
plotStroke: 'yellow',
plotLineWidth: 4,
// 配置图表的主区域的样式
mainFill: 'l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff',
mainFillOpacity: 0.75,
// 配置图表的内容区域的样式
contentFill: 'l(90) 0:#ffadad 0.5:#ffd6a5 1:#fdffb6',
contentShadowColor: '#5d5d5d',
contentShadowBlur: 40,
contentShadowOffsetX: 5,
contentShadowOffsetY: 5,
},
});

坐标轴

概述

Ant Design Charts 中 Axis(坐标轴) 就像是图表的 "尺子",用于建立数据与视觉位置的映射关系,并通过刻度、标签、网格线等元素帮助用户直观理解数据的分布与比例。它能帮你快速看懂图形的位置和数值大小。

简单来说,坐标轴可以帮助我们把数据数字和图表上的位置对应起来,让图表更容易理解。

举个例子:在柱状图中,横轴通常表示时间,纵轴表示销售额,这样你就能一眼看出 "3 月卖了 200 万,4 月涨到 300 万"

坐标轴使用方式示意图

构成元素

使用方式

通过前面的概述内容,相信你对坐标轴已经有了一个清晰的认识。那么具体该如何使用呢?接下来,我将手把手教你如何配置坐标轴。

配置坐标轴其实就像搭积木,只需记住一个简单的核心口诀:"用 axis 属性,按方向配置,哪里需要改哪里改。"

第一步:启用坐标轴(默认已开启)

Ant Design Charts 会根据你的数据类型 自动生成坐标轴,不需要任何配置就能看到基础坐标轴

启用坐标轴(默认已开启)

第二步:按方向单独配置

配置 x(水平方向) 坐标轴

{
"axis": {
"x": {}
}
}

配置 y(垂直方向) 坐标轴

{
"axis": {
"y": {}
}
}

配置层级

坐标轴可以在 Mark 层级配置。在 Ant Design Charts 中每个标记(Mark)都有自己的坐标轴。如果标记对应比例尺是同步的,那么坐标轴也会合并。

({
axis: {
x: { labelFormatter: '%0' },
y: { tickCount: 5 },
},
});

坐标轴也可以在 View 层级配置。坐标轴具有传递性。视图上声明的坐标轴会传递给 children 声明的标记,如果该标记有对应通道的坐标轴,就合并;否则不影响。

({
axis: {
x: { labelFormatter: '%0' },
y: { tickCount: 5 },
},
});

隐藏坐标轴

隐藏每个通道的坐标轴:

坐标轴隐藏演示

隐藏 x 坐标轴:

({
axis: { x: false }, // 隐藏 x 水平方向坐标轴
});

隐藏 y 坐标轴:

({
axis: { y: false }, // 隐藏 y 垂直方向坐标轴
});

隐藏多个坐标轴

({
axis: false,
});

配置项

每个坐标轴由 标题(title)、轴线(line)、刻度(tick)、刻度值(label)以及网格线(grid)组成。

属性描述类型默认值必选
title设置坐标轴的标题文本及其样式title-
line设置坐标轴线的显示及其样式line-
tick设置坐标轴刻度线的显示及其样式tick-
label设置坐标轴刻度值的显示及其样式label-
grid设置坐标轴网格线的显示及其样式grid-
animate设置坐标轴动画效果boolean | animate-
position设置坐标轴的位置left | right | top | bottomx: bottom | y: left

title

属性描述类型默认值必须
title关闭标题或设置标题内容false|string | number | DisplayObject-
titleSpacing标题到坐标轴的距离number | (datum, index, data) => number10
titlePosition标题相对坐标轴的位置,支持首字母简写形式,如'top'简写为't''top'|'bottom'|'left'|'right''lb'
titleFontSize标题文字大小number | (datum, index, data) => number-
titleFontWeight标题的字体粗细string | (datum, index, data) => string-
titleFontFamily标题文字字体number | (datum, index, data) => number-
titleStroke标题字体颜色string | (datum, index, data) => string-
titleStrokeOpacity标题透明度number | (datum, index, data) => number-
titleTextBaseline标题垂直基线string | (datum, index, data) => stringmiddle
titleFillOpacity标题填充透明度number | (datum, index, data) => number1
titleStroke标题描边颜色string | (datum, index, data) => stringtransparent
titleStrokeOpacity标题描边透明度number | (datum, index, data) => number1
titleLineHeight标题行高number | (datum, index, data) => number1
titleLineWidth标题描边宽度number | (datum, index, data) => number0
titleLineDash标题虚线样式number[] | (datum, index, data) => number[][]
titleOpacity标题整体透明度number | (datum, index, data) => number1
titleShadowColor标题阴影颜色string | (datum, index, data) => stringtransparent
titleShadowBlur标题阴影模糊度number | (datum, index, data) => number0
titleShadowOffsetX标题阴影 X 偏移number | (datum, index, data) => number0
titleShadowOffsetY标题阴影 Y 偏移number | (datum, index, data) => number0
titleCursor标题鼠标样式string | (datum, index, data) => stringdefault

配置方式

({
// 配置坐标轴
axis: {
// 配置 y 轴
y: {
// 这部分是轴标题的配置
title: 'Frequency', // 设置 y 轴标题
titleSpacing: 30, // 设置 y 轴标题与轴线之间的间距
titleFill: 'steelblue', // 设置 y 轴标题的颜色
},
// 配置 x 轴
x: {
// 这部分是轴标题的配置
title: 'Letter', // 设置 x 轴标题
},
},
});

line

属性描述类型默认值必须
line是否显示轴线booleanfalse
arrow是否显示箭头booleantrue
lineExtension轴线两侧的延长线[number, number]-
lineArrow定义轴线箭头形状,默认为箭头形状DisplayObject-
lineArrowOffset箭头偏移长度number15
lineArrowSize箭头尺寸number-
lineLineWidth轴线宽度number | (datum, index, data) => number-
lineLineDash轴线描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。[number,number]-
lineOpacity轴线整体透明度number1
lineStroke轴线描边色string-
lineStrokeOpacity轴线描边色透明度number-

配置方式

({
axis: {
x: {
line: true, // 是否显示轴线
arrow: true, // 是否显示箭头
lineArrowOffset: 10, // 箭头偏移长度
lineArrowSize: 30, // 箭头尺寸
lineLineWidth: 10, // 轴线宽度
},
y: {
line: true, // 是否显示轴线
arrow: true, // 是否显示箭头
lineArrowOffset: 10, // 箭头偏移长度
lineArrowSize: 30, // 箭头尺寸
lineLineWidth: 10, // 轴线宽度
},
},
});

tick

属性描述类型默认值必须
tick是否显示刻度booleantrue
tickFilter刻度线过滤(datum, index, data)=>boolean-
tickFormatter刻度线格式化,可用于自定义刻度样式,回调函数中会额外返回该刻度的方向DisplayObject | (datum, index, data, Vector)=> DisplayObject-
tickDirection刻度朝向,为 positive 时,位于侧轴方向(即主轴顺时针 90 度方向), 为 negative 时,刻度位于侧轴负方向'positive' | 'negative'positive
tickLength刻度线长度number|(datum, index, data)=>number15
tickLineWidth刻度线宽度number | (datum, index, data, Vector)=>number-
tickLineDash刻度线描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。[number,number] | (datum, index, data, Vector)=>[number,number]-
tickStroke刻度线颜色string | (datum, index, data, Vector)=>string-
tickStrokeOpacity刻度线透明度number | (datum, index, data, Vector)=>number-
({
// 配置坐标轴
axis: {
y: {
tickLength: 20, // 设置 y 轴刻度线的长度
tickFilter: (_, i) => i % 3 !== 0, // 过滤 y 轴刻度线,只显示每隔 3 个刻度线
},
},
});

label

属性描述类型默认值必须
label是否显示刻度值boolean-
labelFontSize刻度值文字大小number | (datum, index, data)=>number-
labelOpacity刻度值透明度number | (datum, index, data)=>number-
labelFontWeight刻度值字体粗细number |(datum, index, data)=>number-
labelFontFamily刻度值文字字体string | (datum, index, data)=>string-
labelAlign刻度值对齐方式
- 'horizontal' 始终保持水平
- 'parallel' 平行于坐标轴
- 'perpendicular' 垂直于坐标轴
'horizontal' | 'parallel' | 'perpendicular'parallel
labelFilter刻度值过滤(datum, index, data)=> boolean-
labelFormatter刻度值线格式化DisplayObject | (datum, index, data, Vector)=> DisplayObject-
transform刻度值转换,避免文本之间发生重叠。当前支持超长文本缩略、重叠刻度值隐藏、自动旋转Transform[]-
labelAutoHide自动隐藏重叠的刻度值,设置 size 值的时候生效boolean | HideOverlapCfg-
labelAutoRotate自动旋转刻度,设置 size 值的时候生效值boolean | RotateOverlapCfg-
labelAutoEllipsis自动缩略刻度值,设置 size 值的时候生效boolean | EllipsisOverlapCfg-
labelAutoWrap自动换行刻度值,设置 size 值的时候是生效boolean | WrapOverlapCfg-
labelDirection刻度值位于轴线的位置,参考tickDirection'positive' | 'negative'positive
labelSpacing刻度值到其对应刻度的间距number0
labelLineWidth刻度值宽度number |(datum, index, data)=>number-
labelLineDash刻度值描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。[number,number] | (datum, index, data)=>[number, number]-
labelFill刻度值字体颜色string | (datum, index, data)=>string-
labelFillOpacity刻度值文本透明度number | (datum, index, data)=>number-
labelStroke刻度值文本描边颜色string | (datum, index, data)=>string-
labelStrokeOpacity刻度值文本描边透明度number | (datum, index, data)=>number-

labelFormatter 视觉通道用于调整标签的格式。

{
"axis": {
"y": {
"title": "销售额"
},
"x": {
"title": "月份",
"labelFontSize": 12
}
}
}

transform 为了避免刻度标签重叠或超出显示范围,系统提供了多种优化方式,包括缩略、旋转、隐藏和换行。 这些功能可通过两种方式配置:

  1. transform 数组(多策略组合)
  2. labelAutoXXX 系列属性(单策略快捷配置)推荐

两者的核心功能完全一致,区别在于使用场景和配置方式。

  1. transform 数组(多策略组合)
{
"axis": {
"y": {
"title": "y 轴标题"
},
"x": {
"title": "x 轴标题",
"labelFontSize": 12,
"transform": [
{
"suffix": "..",
"minLength": 8,
"maxLength": 12
},
{
"wordWrapWidth": 80,
"maxLines": 2,
"recoverWhenFailed": true
},
{
"optionalAngles": [
0,
45,
90
],
"recoverWhenFailed": true
},
{
"keepHeader": true,
"keepTail": true
}
]
}
}
}
  1. 使用 labelAutoHide、labelAutoRotate、labelAutoEllipsis、labelAutoWrap、 属性(需设置 size)
{
"axis": {
"y": {
"title": "y 轴标题"
},
"x": {
"title": "x 轴标题",
"labelFontSize": 12,
"size": 100,
"labelAutoEllipsis": {
"suffix": "..",
"minLength": 8,
"maxLength": 12
},
"labelAutoWrap": {
"wordWrapWidth": 80,
"maxLines": 2,
"recoverWhenFailed": true
},
"labelAutoRotate": {
"optionalAngles": [
0,
45,
90
],
"recoverWhenFailed": true
},
"labelAutoHide": {
"keepHeader": true,
"keepTail": true
}
}
}
}
export interface Transform {
/** 避免刻度值重叠时的额外边距 */
margin?: number[];
}
export interface EllipsisOverlapCfg extends Transform {
type: 'ellipsis';
/** 缩略替换字符,默认为 ... */
suffix?: string;
/** 文本短于该长度时不再缩略 */
minLength: string | number;
/** 文本短于该长度时一定会进行缩略 */
maxLength?: string | number;
/** 每次缩略执行步长 */
step?: string | number;
}
export interface RotateOverlapCfg extends Transform {
type: 'rotate';
/** 可选的旋转角度值 */
optionalAngles: number[];
/** 当旋转无法避免重叠时,是否恢复为默认旋转角度 */
recoverWhenFailed?: boolean;
}
export interface HideOverlapCfg extends Transform {
type: 'hide';
/** 保证第一个刻度值不被隐藏 */
keepHeader?: boolean;
/** 保证最后一个刻度值不被隐藏 */
keepTail?: boolean;
}
export interface WrapOverlapCfg extends Transform {
type: 'wrap';
/** 单行最大宽度 */
wordWrapWidth?: number;
/** 最大行数 */
maxLines?: number;
recoverWhenFailed?: boolean;
}

grid

在不同坐标系下网格线会具有不同的样式

场景标签样式
直角坐标系linear-grid
极坐标系circle-grid
极坐标系polar-grid
极坐标系 雷达图polygon-grid
属性描述类型默认值必须
grid是否显示网格线booleanfalse
gridFilter网格线过滤(datum, index, data)=> boolean-
gridLength网格线长度。一般情况下,不需要用户配置。number | (datum, index, data)=> number0
gridAreaFill网格线区域颜色string | string[]| (datum, index, data)=> string-
gridLineWidth网格线宽度number-
gridLineDash网格线描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。[number,number]-
gridStroke网格线颜色string-
gridStrokeOpacity网格线透明度number-

animate

支持设置更新时的动画效果

属性描述类型默认值必须
animate是否开启动画boolean | EffectTiming-

EffectTiming 支持配置的属性如下:

属性描述类型默认值必须
delay延迟执行时间 (ms)number-
duration动画持续时间 (ms)number-
easing动画的缓动函数Easing-
endDelay延迟执行时间 (ms)number-
fill动画处于非运行状态时的展示效果Fill-

事件

坐标轴(axis)组件本身没有专属的事件类型。

示例

{
"marginTop": 40,
"axis": {
"x": {
"position": "bottom",
"title": "x 轴标题",
"titleFontWeight": 500,
"grid": true,
"gridLineWidth": 2,
"line": true,
"lineLineWidth": 5,
"lineStroke": "#f50",
"tick": true,
"tickLineWidth": 5,
"tickLength": 10,
"tickStroke": "#3366ff",
"label": true,
"labelFontSize": 12,
"labelFill": "#009900",
"labelFontWeight": 500
},
"y": {
"position": "left",
"title": "y 轴标题",
"titleFontWeight": 500,
"grid": true,
"gridLineWidth": 2,
"line": true,
"lineLineWidth": 5,
"lineStroke": "#f50",
"tick": true,
"tickLineWidth": 5,
"tickLength": 10,
"tickStroke": "#3366ff",
"label": true,
"labelFontSize": 12,
"labelFill": "#009900",
"labelFontWeight": 500
}
}
}

更多的案例,可以查看 图表示例 - 坐标轴 页面。

图例

概述

Ant Design Charts 中 图例(Legend) 是图表的辅助元素,使用颜色、大小、形状区分不同的数据类型,用于图表中数据的筛选。可以理解为是非空间通道( color,opacity,size,shape)对应比例尺的可视化,Ant Design Charts 会根据设置图形属性映射以及数据的类型自动生成不同的图例,当一个变量对应了多个图形属性时,Ant Design Charts 会对图例进行合并,以达到精简的目的。

color,opacity,size,shape 这四个非空间通道如果判断接收的参数是数据源的字段时,会自动生成不同的图例:

视觉通道解释
color根据不同的颜色生成图例
opacity根据不同的透明度生成图例
size根据不同的大小生成图例
shape根据不同的形状生成图例

构成元素

legend-overview

使用方式

配置图例有两种方式

第一种,传入 boolean 设置是否显示图例。

({
legend: false; // 隐藏所有图例
})
({
legend: {color: false}; // 隐藏 color 通道的图例
})

第二种,传入 legendOption 对图例进行整体配置。

({
legend: {
color: {},
size: {},
},
});

配置层级

图例可以在 Mark 层级配置。在 Ant Design Charts 中,每个标记(Mark)都有自己的图例。如果标记对应的比例尺是同步的,那么图例也会合并。

({
legend: {
color: {},
size: {},
},
});

图例也可以在 View 层级配置。图例具有传递性。视图上声明的图例会传递给 children 声明的标记,如果该标记有对应通道的图例,就合并;否则不影响。

({
legend: {
color: {},
size: {},
},
});

配置项

Ant Design Charts 中图例分为 连续图例 和 分类图例 两种,由于这两种图例的结构不同,所以配置项也存在差异。

有的配置项作用范围区分分类图例和连续图例: 分类图例连续图例

属性描述类型默认值必选
orientation图例朝向,对于分类图例来说即滚动方向horizontal | verticalhorizontal
position图例的位置top | right | left | bottomtop
layout调整图例的 flex 布局方式layout详见layout
size图例的尺寸number-
width图例的宽度number-
crossPadding图例到图表区域的距离number12
order图例在布局的时候的排序number1
title配置图例的标题title详见title
cols 分类图例指定每行显示的图例项数量,为空时表示列数不受限制number-
colPadding 分类图例指定图例项之间的横向间隔number12
rowPadding 分类图例指定图例项之间的纵向间隔number8
maxRows 分类图例指定图例最大行数number3
maxCols 分类图例指定图例最大列数number3
itemMarker 分类图例配置图例项的图标itemMarker详见itemMarker
itemLabel 分类图例配置图例项的标签文字itemLabel详见itemLabel
itemValue 分类图例配置图例项的值itemValue详见itemValue
itemBackground 分类图例配置图例项的背景itemBackground详见itemBackground
itemWidth 分类图例配置图例项的宽度number-
itemSpan 分类图例配置图例项图标、标签和值的空间划分number | number[][1, 1, 1]
itemSpacing 分类图例配置图例项图标、标签和值之间的间距number | number[][8, 8]
nav 分类图例配置图例的分页器nav详见nav
color 连续图例配置连续图例的色带颜色string[] | d3-interpolate-
block 连续图例连续图例是否按区间显示booleanfalse
type 连续图例配置连续图例的类型size |colorcolor
ribbon 连续图例配置连续图例的色带ribbon详见ribbon
handle 连续图例配置连续图例的滑动手柄handle详见handle
label 连续图例配置连续图例的标签/刻度值label详见label
indicator 连续图例配置连续图例的指示器indicator详见indicator

orientation

optional horizontal | vertical

图例朝向,对于分类图例来说即滚动方向。默认为 horizontal。

position

optional "top" | "right" | "left" | "bottom"

图例的位置。默认为 top。

null;

layout

LegendLayoutCfg optional

Legend 组件支持调整其在画布中的位置,通过 layout 属性来设置。 目前支持基本的 Flex 布局方式,支持的属性包括: justifyContent, alignItems, flexDirection。LegendLayoutCfg 配置如下:

属性描述类型默认值必选
justifyContent主轴对齐方式flex-start | flex-end | centerflex-start
alignItems交叉轴对齐flex-start | flex-end | centerflex-start
flexDirection主轴方向row | columnposition 为top和bottom的时候为row,其他时候为column

通过配置图例的 position 和 layout ,我们可以很灵活地改变图例的位置。

({
legend: {
color: {
position: 'right',
layout: {
justifyContent: 'center',
},
},
},
});

size

number optional

Legend 组件的尺寸。影响组件在交叉轴上的大小,例如水平位置的图例,影响整体高度。手动配置会导致 Ant Design Charts 内部计算逻辑失效,需要自己配置 margin、padding、inset 等大小,详见图表布局。除非需要定制化的场景,否则不建议配置。

width

number optional

Legend 组件的宽度。

crossPadding

number optional

Legend 组件和图表的距离。默认为 12。

order

number optional

Legend 组件在布局的时候的排序。默认为 1。Ant Design Charts 内部的组件都有默认的排序大小,值越小越靠近图表区域,例如 Title 组件的默认排序是 2,就比默认排序为 1 的 Legend 组件更远离图表区域。

title

LegendTitleCfg optional

图例标题配置项。LegendTitleCfg 配置如下:

属性描述类型默认值必选
title关闭标题或设置标题内容false | string连续图例为 true,分类图例为 false
titleSpacing标题到内容区域的间距number | number[]4
titleInset标题文本内边距number | number[]0
titlePosition标题所处位置。可采用简写形式,如i 表示inner,如lt 表示left-toptop | bottom |left |right |left-top |left-bottom |right-top |right-bottom |inner-
titleFontSize标题文字大小number | (datum, index, data) => number12
titleFontFamily标题文字字体string | (datum, index, data) => string-
titleFontWeight标题字体粗细number | (datum, index, data) => numbernormal
titleLineHeight标题文字的行高number | (datum, index, data) => number-
titleTextAlign设置标题文本内容的当前对齐方式center | end | left | right | startstart
titleTextBaseline设置在绘制标题文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
titleFill标题字体颜色string | (datum, index, data) => string#1D2129
titleFillOpacity标题字体颜色透明度number | (datum, index, data) => number0.65
titleStroke标题字体描边颜色string | (datum, index, data) => string-
titleStrokeOpacity标题字体描边颜色透明度number | (datum, index, data) => number-
titleLineWidth标题字体描边的宽度number | (datum, index, data) => number-
titleLineDash标题字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
titleOpacity标题文字的整体透明度number | (datum, index, data) => number-
titleShadowColor标题文字阴影颜色string | (datum, index, data) => string-
titleShadowBlur标题文字阴影的高斯模糊系数number | (datum, index, data) => number-
titleShadowOffsetX设置阴影距标题文字的水平距离number | (datum, index, data) => number-
titleShadowOffsetY设置阴影距标题文字的垂直距离number | (datum, index, data) => number-
titleCursor标题鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault

在 Legend 组件中配置标题的时候,不是以对象的形式来配置,而是以 title前缀加属性的方式来配置。

({
legend: {
size: {
title: '图例标题',
titleSpacing: 0,
titleInset: 0,
titlePosition: 't',
titleFontSize: 16,
titleFontFamily: 'sans-serif',
titleFontWeight: 500,
titleLineHeight: 20,
titleTextAlign: 'center',
titleTextBaseline: 'middle',
titleFill: '#000',
titleFillOpacity: 0.9,
titleStroke: '#DAF5EC',
titleStrokeOpacity: 0.9,
titleLineWidth: 2,
titleLineDash: [4, 8],
titleOpacity: 1,
titleShadowColor: '#d3d3d3',
titleShadowBlur: 10,
titleShadowOffsetX: 10,
titleShadowOffsetY: 10,
titleCursor: 'pointer',
},
},
});

尝试一下:

cols

number optional

适用于 分类图例 。指定每行显示的图例项数量,为空时表示列数不受限制。

图例布局默认采用流式布局。

flow layout

当指定 cols 之后会采用网格布局。

grid layout 1grid layout 2

colPadding

number optional

适用于 分类图例 。指定图例项之间的横向间隔。默认为 12。

rowPadding

number optional

适用于 分类图例 。指定图例项之间的纵向间隔。默认为 8。

maxRows

number optional

适用于 分类图例 。指定图例最大行数。默认为 3。

maxCols

number optional

适用于 分类图例 。指定图例最大列数。默认为 3。

💡 maxRows 和 maxCols 是怎么作用于图例布局的?

maxRows 和 maxCols 用于限制图例布局的最大行数和列数。在代码中通过 getRows = (rows) => Math.min(rows, maxRows)和 getCols = (cols) => Math.min(cols, maxCols)实现行列数限制。

参数垂直布局水平布局
maxCols限制列数,控制图例宽度无直接影响(列数由 cols 参数指定)
maxRows无直接影响(行数由高度自动计算)限制行数,控制图例高度

潜在问题

  • 垂直布局:若 maxCols 过小,可能导致单列行数超过 maxHeight,引发溢出。

  • 水平布局:若 maxRows 过小,部分项可能被截断。

此时需要适当调整图表的 margin 和 padding,保证图例有足够的空间展示。

itemMarker

LegendItemMarkerCfg optional

适用于 分类图例 。配置图例项的图标。LegendItemMarkerCfg 配置如下:

属性描述类型默认值必选
itemMarker图例项图标Symbols |(datum, index, data)=>Symbolscircle
itemMarkerSize图例项图标大小number | (datum, index, data) => number8
itemMarkerFill图例项图标填充色string | (datum, index, data) => string-
itemMarkerFillOpacity图例项图标填充透明度number | (datum, index, data) => number1
itemMarkerStroke图例项图标的描边string | (datum, index, data) => string-
itemMarkerStrokeOpacity图例项图标描边透明度number | (datum, index, data) => number-
itemMarkerLineWidth图例项图标描边的宽度number | (datum, index, data) => number-
itemMarkerLineDash图例项图标描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
itemMarkerOpacity图例项图标的整体透明度number | (datum, index, data) => number-
itemMarkerShadowColor图例项图标阴影颜色string | (datum, index, data) => string-
itemMarkerShadowBlur图例项图标阴影的高斯模糊系数number | (datum, index, data) => number-
itemMarkerShadowOffsetX设置阴影距图例项图标的水平距离number | (datum, index, data) => number-
itemMarkerShadowOffsetY设置阴影距图例项图标的垂直距离number | (datum, index, data) => number-
itemMarkerCursor图例项图标鼠标样式。同 css 的鼠标样式。string | (datum, index, data) => stringdefault

Symbols 可选类型

属性描述
bowtie图形类型:蝴蝶结
cross图形类型:十字
dash图形类型:短横线
diamond图形类型:菱形
dot图形类型:点
hexagon图形类型:六边形
hollowBowtie图形类型:空心蝴蝶结
hollowDiamond图形类型:空心菱形
hollowHexagon图形类型:空心六边形
hollowPoint图形类型:空心点
hollowSquare图形类型:空心正方形
hollowTriangle图形类型:空心三角形
hollowTriangleDown图形类型:倒空心三角形
hv样式类型:HV 路径
hvh样式类型:HVH 路径
hyphen图形类型:连字符
line图形类型:直线
plus图形类型:加号
point图形类型:实心点
rect图形类型:矩形
smooth样式类型:平滑曲线
square图形类型:正方形
tick图形类型:刻度线
triangleDown图形类型:倒三角形
triangle图形类型:三角形
vh样式类型:VH 路径
vhv样式类型:VHV 路径
{
"itemMarker": "bowtie",
"scale": {
"color": {
"domain": [
"a",
"b"
],
"range": [
"steelblue",
"orange"
]
}
}
}

在 Legend 组件中配置图例项图标的时候,不是以对象的形式来配置,而是以 itemMarker前缀加属性的方式来配置。

({
legend: {
color: {
itemMarker: 'rect',
itemMarkerSize: 20,
itemMarkerFill: '#000',
itemMarkerFillOpacity: 0.9,
itemMarkerStroke: '#DAF5EC',
itemMarkerStrokeOpacity: 0.9,
itemMarkerLineWidth: 2,
itemMarkerLineDash: [4, 8],
itemMarkerOpacity: 1,
itemMarkerShadowColor: '#d3d3d3',
itemMarkerShadowBlur: 10,
itemMarkerShadowOffsetX: 10,
itemMarkerShadowOffsetY: 10,
itemMarkerCursor: 'pointer',
},
},
});

itemLabel

LegendItemLabelCfg optional

适用于 分类图例 。配置图例项的标签。LegendItemLabelCfg 配置如下:

属性描述类型默认值必选
itemLabelText图例项标签内容string | (datum, index, data) => string-
itemLabelFontSize图例项标签文字大小number | (datum, index, data) => number12
itemLabelFontFamily图例项标签文字字体string | (datum, index, data) => string-
itemLabelFontWeight图例项标签字体粗细number | (datum, index, data) => numbernormal
itemLabelLineHeight图例项标签文字的行高number | (datum, index, data) => number-
itemLabelTextAlign设置图例项标签文本内容的当前对齐方式center | end | left | right | startstart
itemLabelTextBaseline设置在绘制图例项标签文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
itemLabelFill图例项标签字体颜色string | (datum, index, data) => string#1D2129
itemLabelFillOpacity图例项标签字体颜色透明度number | (datum, index, data) => number0.9
itemLabelStroke图例项标签字体描边颜色string | (datum, index, data) => string-
itemLabelStrokeOpacity图例项标签字体描边颜色透明度number | (datum, index, data) => number-
itemLabelLineWidth图例项标签字体描边的宽度number | (datum, index, data) => number-
itemLabelLineDash图例项标签字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (da tu m, index, data) => [number , number]-
itemLabelOpacity图例项标签文字的整体透明度number | (datum, index, data) => number-
itemLabelShadowColor图例项标签文字阴影颜色string | (datum, index, data) => string-
itemLabelShadowBlur图例项标签文字阴影的高斯模糊系数number | (datum, index, data) => number-
itemLabelShadowOffsetX设置阴影距图例项标签文字的水平距离number | (datum, index, data) => number-
itemLabelShadowOffsetY设置阴影距图例项标签文字的垂直距离number | (datum, index, data) => number-
itemLabelCursor图例项标签鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault

在 Legend 组件中配置图例项标签的时候,不是以对象的形式来配置,而是以 itemLabel前缀加属性的方式来配置。

({
legend: {
color: {
itemLabelText: '图例项标签',
itemLabelFontSize: 16,
itemLabelFontFamily: 'sans-serif',
itemLabelFontWeight: 500,
itemLabelLineHeight: 20,
itemLabelTextAlign: 'center',
itemLabelTextBaseline: 'middle',
itemLabelFill: '#000',
itemLabelFillOpacity: 0.9,
itemLabelStroke: '#DAF5EC',
itemLabelStrokeOpacity: 0.9,
itemLabelLineWidth: 2,
itemLabelLineDash: [4, 8],
itemLabelOpacity: 1,
itemLabelShadowColor: '#d3d3d3',
itemLabelShadowBlur: 10,
itemLabelShadowOffsetX: 10,
itemLabelShadowOffsetY: 10,
itemLabelCursor: 'pointer',
},
},
});

itemValue

LegendItemValueCfg optional

适用于 分类图例 。配置图例项的值。LegendItemValueCfg 配置如下:

属性描述类型默认值必选
itemValueText图例项值内容string | (datum, index, data) => string-
itemValueFontSize图例项值文字大小number | (datum, index, data) => number12
itemValueFontFamily图例项值文字字体string | (datum, index, data) => string-
itemValueFontWeight图例项值字体粗细number | (datum, index, data) => numbernormal
itemValueLineHeight图例项值文字的行高number | (datum, index, data) => number-
itemValueTextAlign设置图例项值文本内容的当前对齐方式center | end | left | right | startstart
itemValueTextBaseline设置在绘制图例项值文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
itemValueFill图例项值字体颜色string | (datum, index, data) => string#1D2129
itemValueFillOpacity图例项值字体颜色透明度number | (datum, index, data) => number0.65
itemValueStroke图例项值字体描边颜色string | (datum, index, data) => string-
itemValueStrokeOpacity图例项值字体描边颜色透明度number | (datum, index, data) => number-
itemValueLineWidth图例项值字体描边的宽度number | (datum, index, data) => number-
itemValueLineDash图例项值字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
itemValueOpacity图例项值文字的整体透明度number | (datum, index, data) => number-
itemValueShadowColor图例项值文字阴影颜色string | (datum, index, data) => string-
itemValueShadowBlur图例项值文字阴影的高斯模糊系数number | (datum, index, data) => number-
itemValueShadowOffsetX设置阴影距图例项值文字的水平距离number | (datum, index, data) => number-
itemValueShadowOffsetY设置阴影距图例项值文字的垂直距离number | (datum, index, data) => number-
itemValueCursor图例项值鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault

在 Legend 组件中配置图例项值的时候,不是以对象的形式来配置,而是以 itemValue前缀加属性的方式来配置。

({
legend: {
color: {
itemValueText: '图例项值',
itemValueFontSize: 16,
itemValueFontFamily: 'sans-serif',
itemValueFontWeight: 500,
itemValueLineHeight: 20,
itemValueTextAlign: 'center',
itemValueTextBaseline: 'middle',
itemValueFill: '#000',
itemValueFillOpacity: 0.9,
itemValueStroke: '#DAF5EC',
itemValueStrokeOpacity: 0.9,
itemValueLineWidth: 2,
itemValueLineDash: [4, 8],
itemValueOpacity: 1,
itemValueShadowColor: '#d3d3d3',
itemValueShadowBlur: 10,
itemValueShadowOffsetX: 10,
itemValueShadowOffsetY: 10,
itemValueCursor: 'pointer',
},
},
});

itemBackground

LegendItemBackgroundCfg optional

适用于 分类图例 。配置图例项的背景。LegendItemBackgroundCfg 配置如下:

属性描述类型默认值必选
itemBackgroundRadius图例项背景圆角number | (datum, index, data) => number0
itemBackgroundFill图例项背景填充色string | (datum, index, data) => stringtransparent
itemBackgroundFillOpacity图例项背景填充透明度number | (datum, index, data) => number-
itemBackgroundStroke图例项背景的描边string | (datum, index, data) => string-
itemBackgroundStrokeOpacity图例项背景描边透明度number | (datum, index, data) => number-
itemBackgroundLineWidth图例项背景描边的宽度number | (datum, index, data) => number-
itemBackgroundLineDash图例项背景描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
itemBackgroundOpacity图例项背景的整体透明度number | (datum, index, data) => number-
itemBackgroundShadowColor图例项背景阴影颜色string | (datum, index, data) => string-
itemBackgroundShadowBlur图例项背景阴影的高斯模糊系数number | (datum, index, data) => number-
itemBackgroundShadowOffsetX设置阴影距图例项背景的水平距离number | (datum, index, data) => number-
itemBackgroundShadowOffsetY设置阴影距图例项背景的垂直距离number | (datum, index, data) => number-
itemBackgroundCursor图例项背景鼠标样式。同 css 的鼠标样式。string | (datum, index, data) => stringdefault

在 Legend 组件中配置图例项背景的时候,不是以对象的形式来配置,而是以 itemBackground前缀加属性的方式来配置。

({
legend: {
color: {
itemBackgroundRadius: 50,
itemBackgroundFill: '#000',
itemBackgroundFillOpacity: 0.9,
itemBackgroundStroke: '#DAF5EC',
itemBackgroundStrokeOpacity: 0.9,
itemBackgroundLineWidth: 2,
itemBackgroundLineDash: [4, 8],
itemBackgroundOpacity: 1,
itemBackgroundShadowColor: '#d3d3d3',
itemBackgroundShadowBlur: 10,
itemBackgroundShadowOffsetX: 10,
itemBackgroundShadowOffsetY: 10,
itemBackgroundCursor: 'pointer',
},
},
});

接下来,试试结合 itemMarker、itemLabel、itemValue和itemBackground的各种属性,来配置一个自定义的图例吧:

itemWidth

number optional

适用于 分类图例 。配置图例项的宽度。

itemSpan

number|number[] optional

适用于 分类图例 。配置图例项图标、标签和值的空间划分。默认为[1, 1, 1]。

itemSpacing

number|number[] optional

适用于 分类图例 。配置图例项图标、标签和值之间的间距。默认为[8, 8]。

nav

LegendNavCfg optional

适用于 分类图例 。配置图例的分页器。在网格布局下,页面容量 = gridRow × gridCol,如果分类项数量超出此容量,则分页。在弹性布局下,页面容量动态计算,受容器宽度和高度限制。当分类项超过容器高度或宽度时,进行分页,展示分页器组件。LegendNavCfg 配置如下:

legend-nav
属性描述类型默认值必选
navEffect翻页显示效果参见 Web Animations APIlinear
navDuration单次翻页动效时长number200
navOrientation翻页滚动方向
- 横向horizontal
- 纵向vertical
horizontal |verticalhorizontal
navDefaultPage默认展示页数number0
navLoop是否启用循环翻页booleanfalse
navPageWidth分页器页宽number-
navPageHeight分页器页高number-
navControllerPadding分页器按钮与分页器数字的间隔number | number[]5
navControllerSpacing分页器按钮与页的间隔,可以用来配置分页器与图例的间隔number | number[]5
navPageNumFontSize分页器数字文字大小number | (datum, index, data) => number12
navPageNumFontFamily分页器数字文字字体string | (datum, index, data) => string-
navPageNumFontWeight分页器数字字体粗细number | (datum, index, data) => numbernormal
navPageNumLineHeight分页器数字文字的行高number | (datum, index, data) => number-
navPageNumTextAlign设置分页器数字文本内容的当前对齐方式center | end | left | right | startstart
navPageNumTextBaseline设置在绘制分页器数字文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
navPageNumFill分页器数字字体颜色string | (datum, index, data) => string#1D2129
navPageNumFillOpacity分页器数字字体颜色透明度number | (datum, index, data) => number0.45
navPageNumStroke分页器数字字体描边颜色string | (datum, index, data) => string-
navPageNumStrokeOpacity分页器数字字体描边颜色透明度number | (datum, index, data) => number-
navPageNumLineWidth分页器数字字体描边的宽度number | (datum, index, data) => number-
navPageNumLineDash分页器数字字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
navPageNumOpacity分页器数字文字的整体透明度number | (datum, index, data) => number-
navPageNumShadowColor分页器数字文字阴影颜色string | (datum, index, data) => string-
navPageNumShadowBlur分页器数字文字阴影的高斯模糊系数number | (datum, index, data) => number-
navPageNumShadowOffsetX设置阴影距分页器数字文字的水平距离number | (datum, index, data) => number-
navPageNumShadowOffsetY设置阴影距分页器数字文字的垂直距离number | (datum, index, data) => number-
navPageNumCursor分页器数字鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault
navButtonSize分页器按钮尺寸number | (datum, index, data) => number-
navButtonFill分页器按钮填充色string | (datum, index, data) => string#1D2129
navButtonFillOpacity分页器按钮填充透明度number | (datum, index, data) => number0.65
navButtonStroke分页器按钮的描边string | (datum, index, data) => string-
navButtonStrokeOpacity分页器按钮描边透明度number | (datum, index, data) => number-
navButtonLineWidth分页器按钮描边的宽度number | (datum, index, data) => number-
navButtonLineDash分页器按钮描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
navButtonOpacity分页器按钮的整体透明度number | (datum, index, data) => number-
navButtonShadowColor分页器按钮阴影颜色string | (datum, index, data) => string-
navButtonShadowBlur分页器按钮阴影的高斯模糊系数number | (datum, index, data) => number-
navButtonShadowOffsetX设置阴影距分页器按钮的水平距离number | (datum, index, data) => number-
navButtonShadowOffsetY设置阴影距分页器按钮的垂直距离number | (datum, index, data) => number-
navButtonCursor分页器按钮鼠标样式。同 css 的鼠标样式。string | (datum, index, data) => stringdefault
navFormatter页码文本格式化(current: number, total: number) => string-

在 Legend 组件中配置分页器属性的时候,不是以对象的形式来配置,而是以 nav前缀加属性的方式来配置。

({
legend: {
color: {
navEffect: 'cubic-bezier',
navDuration: 400,
navOrientation: 'vertical',
navDefaultPage: 1,
navLoop: true,
navPageWidth: 10,
navPageHeight: 10,
navControllerPadding: 10,
navControllerSpacing: 10,
//配置navPageNum的绘图属性
navPageNumFontSize: 16,
navPageNumFontFamily: 'sans-serif',
navPageNumFontWeight: 500,
navPageNumLineHeight: 20,
navPageNumTextAlign: 'center',
navPageNumTextBaseline: 'middle',
navPageNumFill: '#000',
navPageNumFillOpacity: 0.9,
navPageNumStroke: '#DAF5EC',
navPageNumStrokeOpacity: 0.9,
navPageNumLineWidth: 2,
navPageNumLineDash: [4, 8],
navPageNumOpacity: 1,
navPageNumShadowColor: '#d3d3d3',
navPageNumShadowBlur: 10,
navPageNumShadowOffsetX: 10,
navPageNumShadowOffsetY: 10,
navPageNumCursor: 'pointer',
// 配置navButton的绘图属性
navButtonFill: '#000',
navButtonFillOpacity: 0.9,
navButtonStroke: '#DAF5EC',
navButtonStrokeOpacity: 0.9,
navButtonLineWidth: 2,
navButtonLineDash: [4, 8],
navButtonOpacity: 1,
navButtonShadowColor: '#d3d3d3',
navButtonShadowBlur: 10,
navButtonShadowOffsetX: 10,
navButtonShadowOffsetY: 10,
navButtonCursor: 'pointer',
},
},
});

color

string[] | d3-interpolate optional

适用于 连续图例 。配置连续图例的色带颜色,为数组时会从中按序取色。

block

boolean optional

适用于 连续图例 。连续图例是否按区间显示。默认为 false。

type

size | color optional

适用于 连续图例 。配置连续图例的类型。默认为 color。

结合 block 和 type 属性可以配置不同样式的连续图例。连续数据的图例具有 4 种样式,分别为:

  • 连续表示 默认

    ribbon-color
  • 范围表示 block=true

    ribbon-color
  • 尺寸表示 type='size'

    ribbon-color
  • 尺寸、范围表示 type='size' block=true

    ribbon-color

ribbon

LegendRibbonCfg optional

适用于 连续图例 。配置连续图例的色带。LegendRibbonCfg 配置如下:

属性描述类型默认值必选
ribbonSize色带大小number | (datum, index, data) => number12
ribbonFill色带填充色string | (datum, index, data) => string#aaa
ribbonFillOpacity色带填充透明度number | (datum, index, data) => number-
ribbonStroke色带的描边string | (datum, index, data) => string-
ribbonStrokeOpacity色带描边透明度number | (datum, index, data) => number-
ribbonLineWidth色带描边的宽度number | (datum, index, data) => number-
ribbonLineDash色带描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
ribbonOpacity色带的整体透明度number | (datum, index, data) => number-
ribbonShadowColor色带阴影颜色string | (datum, index, data) => string-
ribbonShadowBlur色带阴影的高斯模糊系数number | (datum, index, data) => number-
ribbonShadowOffsetX设置阴影距色带的水平距离number | (datum, index, data) => number-
ribbonShadowOffsetY设置阴影距色带的垂直距离number | (datum, index, data) => number-
ribbonCursor色带鼠标样式。同 css 的鼠标样式。string | (datum, index, data) => stringdefault

在 Legend 组件中配置色带的时候,不是以对象的形式来配置,而是以 ribbon前缀加属性的方式来配置。

({
legend: {
color: {
ribbonSize: 20,
ribbonFill: '#000',
ribbonFillOpacity: 0.9,
ribbonStroke: '#DAF5EC',
ribbonStrokeOpacity: 0.9,
ribbonLineWidth: 2,
ribbonLineDash: [4, 8],
ribbonOpacity: 1,
ribbonShadowColor: '#d3d3d3',
ribbonShadowBlur: 10,
ribbonShadowOffsetX: 10,
ribbonShadowOffsetY: 10,
ribbonCursor: 'pointer',
},
},
});

handle

LegendHandleCfg optional

滑动窗口标记了当前的值选取范围,通过与滑动窗口交互能够对视图中的值范围进行选择。

slider-window

适用于 连续图例 。配置连续图例的滑动手柄。 LegendHandleCfg 配置如下:

属性描述类型默认值必选
handle是否显示滑动手柄booleantrue
handleLabel是否显示滑动手柄标签booleanfalse
slidable窗口是否可以滑动booleantrue
range滑动窗口默认选择范围[number, number][min, max]
step单次滑动步长number1
handleLabelFontSize手柄标签文字大小number | (datum, index, data) => number12
handleLabelFontFamily手柄标签文字字体string | (datum, index, data) => string-
handleLabelFontWeight手柄标签字体粗细number | (datum, index, data) => numbernormal
handleLabelLineHeight手柄标签文字的行高number | (datum, index, data) => number-
handleLabelTextAlign设置手柄标签文本内容的当前对齐方式center | end | left | right | startstart
handleLabelTextBaseline设置在绘制手柄标签文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
handleLabelFill手柄标签字体颜色string | (datum, index, data) => string#1D2129
handleLabelFillOpacity手柄标签字体颜色透明度number | (datum, index, data) => number0.45
handleLabelStroke手柄标签字体描边颜色string | (datum, index, data) => string-
handleLabelStrokeOpacity手柄标签字体描边颜色透明度number | (datum, index, data) => number-
handleLabelLineWidth手柄标签字体描边的宽度number | (datum, index, data) => number-
handleLabelLineDash手柄标签字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
handleLabelOpacity手柄标签文字的整体透明度number | (datum, index, data) => number-
handleLabelShadowColor手柄标签文字阴影颜色string | (datum, index, data) => string-
handleLabelShadowBlur手柄标签文字阴影的高斯模糊系数number | (datum, index, data) => number-
handleLabelShadowOffsetX设置阴影距手柄标签文字的水平距离number | (datum, index, data) => number-
handleLabelShadowOffsetY设置阴影距手柄标签文字的垂直距离number | (datum, index, data) => number-
handleLabelCursor手柄标签鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault
handleIconSize手柄图标尺寸色number | (datum, index, data) => number-
handleIconFill手柄图标填充色string | (datum, index, data) => string#1D2129
handleIconFillOpacity手柄图标填充透明度number | (datum, index, data) => number0.65
handleIconStroke手柄图标的描边string | (datum, index, data) => string-
handleIconStrokeOpacity手柄图标描边透明度number | (datum, index, data) => number-
handleIconLineWidth手柄图标描边的宽度number | (datum, index, data) => number-
handleIconLineDash手柄图标描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
handleIconOpacity手柄图标的整体透明度number | (datum, index, data) => number-
handleIconShadowColor手柄图标阴影颜色string | (datum, index, data) => string-
handleIconShadowBlur手柄图标阴影的高斯模糊系数number | (datum, index, data) => number-
handleIconShadowOffsetX设置阴影距手柄图标的水平距离number | (datum, index, data) => number-
handleIconShadowOffsetY设置阴影距手柄图标的垂直距离number | (datum, index, data) => number-
handleIconCursor手柄图标鼠标样式。同 css 的鼠标样式。string | (datum, index, data) => stringdefault

在 Legend 组件中配置连续图例滑动手柄属性的时候,不是以对象的形式来配置,而是以 handle前缀加属性的方式来配置。

({
legend: {
color: {
handle: true,
handleLabel: true,
slidable: true,
range: [0, 1],
step: 1,
//配置handleLabel的绘图属性
handleLabelFontSize: 16,
handleLabelFontFamily: 'sans-serif',
handleLabelFontWeight: 500,
handleLabelLineHeight: 20,
handleLabelTextAlign: 'center',
handleLabelTextBaseline: 'middle',
handleLabelFill: '#000',
handleLabelFillOpacity: 0.9,
handleLabelStroke: '#DAF5EC',
handleLabelStrokeOpacity: 0.9,
handleLabelLineWidth: 2,
handleLabelLineDash: [4, 8],
handleLabelOpacity: 1,
handleLabelShadowColor: '#d3d3d3',
handleLabelShadowBlur: 10,
handleLabelShadowOffsetX: 10,
handleLabelShadowOffsetY: 10,
handleLabelCursor: 'pointer',
handleIconSize: 50,
// 配置handleIcon的绘图属性
handleIconFill: '#000',
handleIconFillOpacity: 0.9,
handleIconStroke: '#DAF5EC',
handleIconStrokeOpacity: 0.9,
handleIconLineWidth: 2,
handleIconLineDash: [4, 8],
handleIconOpacity: 1,
handleIconShadowColor: '#d3d3d3',
handleIconShadowBlur: 10,
handleIconShadowOffsetX: 10,
handleIconShadowOffsetY: 10,
handleIconCursor: 'pointer',
},
},
});

label

LegendLabelCfg optional

适用于 连续图例 。配置连续图例的标签/刻度值。 LegendLabelCfg 配置如下:

属性描述类型默认值必选
label是否显示连续图例的刻度值booleantrue
labelFormatter连续图例的刻度值格式化(datum, index, data)=>string-
labelFilter连续图例的刻度值过滤(datum, index, data)=>boolean-
labelDirection连续图例的刻度值位于色带的位置,参考 axis directionpositive | negativepositive
labelSpacing连续图例的刻度值到色带的间距number3
labelAlign连续图例的刻度值对齐位置
- 'value' 对齐到刻度
- 'range' 对齐到范围
value | rangevalue
labelFontSize连续图例刻度值文字大小number | (datum, index, data) => number12
labelFontFamily连续图例刻度值文字字体string | (datum, index, data) => string-
labelFontWeight连续图例刻度值字体粗细number | (datum, index, data) => numbernormal
labelLineHeight连续图例刻度值文字的行高number | (datum, index, data) => number-
labelTextAlign设置连续图例刻度值文本内容的当前对齐方式center | end | left | right | startstart
labelTextBaseline设置在绘制连续图例刻度值文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
labelFill连续图例刻度值字体颜色string | (datum, index, data) => string#1D2129
labelFillOpacity连续图例刻度值字体颜色透明度number | (datum, index, data) => number0.45
labelStroke连续图例刻度值字体描边颜色string | (datum, index, data) => string-
labelStrokeOpacity连续图例刻度值字体描边颜色透明度number | (datum, index, data) => number-
labelLineWidth连续图例刻度值字体描边的宽度number | (datum, index, data) => number-
labelLineDash连续图例刻度值字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
labelOpacity连续图例刻度值文字的整体透明度number | (datum, index, data) => number-
labelShadowColor连续图例刻度值文字阴影颜色string | (datum, index, data) => string-
labelShadowBlur连续图例刻度值文字阴影的高斯模糊系数number | (datum, index, data) => number-
labelShadowOffsetX设置阴影距连续图例刻度值文字的水平距离number | (datum, index, data) => number-
labelShadowOffsetY设置阴影距连续图例刻度值文字的垂直距离number | (datum, index, data) => number-
labelCursor手柄标签鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault

刻度值对齐方式

  • 对齐到刻度
align-tick
  • 对齐到范围
align-range

在 Legend 组件中配置连续图例的标签/刻度值属性的时候,不是以对象的形式来配置,而是以 label前缀加属性的方式来配置。

({
legend: {
color: {
label: true,
labelFormatter: (d) => {},
labelFilter: (datum, index, data) => {},
labelDirection: 'positive',
labelSpacing: 5,
labelAlign: 'range',
// 配置连续图例的刻度值label的绘图属性
labelFontSize: 16,
labelFontFamily: 'sans-serif',
labelFontWeight: 500,
labelLineHeight: 20,
labelTextAlign: 'center',
labelTextBaseline: 'middle',
labelFill: '#000',
labelFillOpacity: 0.9,
labelStroke: '#DAF5EC',
labelStrokeOpacity: 0.9,
labelLineWidth: 2,
labelLineDash: [4, 8],
labelOpacity: 1,
labelShadowColor: '#d3d3d3',
labelShadowBlur: 10,
labelShadowOffsetX: 10,
labelShadowOffsetY: 10,
labelCursor: 'pointer',
},
},
});

indicator

LegendIndicatorCfg optional

适用于 连续图例 。配置连续图例的指示器。指示器是在与连续图例交互过程中指示当前所在位置所表示值大小的提示组件。

indicator

LegendIndicatorCfg 配置如下:

属性描述类型默认值必选
indicator是否显示连续图例的刻值指示器booleanfalse
indicatorFormatter值指示器格式化(datum, index, data)=>string-
indicatorLabelFontSize值指示器文字大小number | (datum, index, data) => number-
indicatorLabelFontFamily值指示器文字字体string | (datum, index, data) => string-
indicatorLabelFontWeight值指示器字体粗细number | (datum, index, data) => number-
indicatorLabelLineHeight值指示器文字的行高number | (datum, index, data) => number-
indicatorLabelTextAlign设置值指示器文本内容的当前对齐方式center | end | left | right | startstart
indicatorLabelTextBaseline设置在绘制值指示器文本时使用的当前文本基线top | middle | bottom | alphabetic | hangingbottom
indicatorLabelFill值指示器字体颜色string | (datum, index, data) => string-
indicatorLabelFillOpacity值指示器字体颜色透明度number | (datum, index, data) => number-
indicatorLabelStroke值指示器字体描边颜色string | (datum, index, data) => string-
indicatorLabelStrokeOpacity值指示器字体描边颜色透明度number | (datum, index, data) => number-
indicatorLabelLineWidth值指示器字体描边的宽度number | (datum, index, data) => number-
indicatorLabelLineDash值指示器字体描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
indicatorLabelOpacity值指示器文字的整体透明度number | (datum, index, data) => number-
indicatorLabelShadowColor值指示器文字阴影颜色string | (datum, index, data) => string-
indicatorLabelShadowBlur值指示器文字阴影的高斯模糊系数number | (datum, index, data) => number-
indicatorLabelShadowOffsetX设置阴影距值指示器文字的水平距离number | (datum, index, data) => number-
indicatorLabelShadowOffsetY设置阴影距值指示器文字的垂直距离number | (datum, index, data) => number-
indicatorLabelCursor值指示器鼠标样式。同 css 的鼠标样式string | (datum, index, data) => stringdefault
indicatorBackgroundFill值指示器背景填充色string | (datum, index, data) => string-
indicatorBackgroundFillOpacity值指示器背景填充透明度number | (datum, index, data) => number-
indicatorBackgroundStroke值指示器背景的描边string | (datum, index, data) => string-
indicatorBackgroundStrokeOpacity值指示器背景描边透明度number | (datum, index, data) => number-
indicatorBackgroundLineWidth值指示器背景描边的宽度number | (datum, index, data) => number-
indicatorBackgroundLineDash值指示器背景描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number] | (datum, index, data) => [number , number]-
indicatorBackgroundOpacity值指示器背景的整体透明度number | (datum, index, data) => number-
indicatorBackgroundShadowColor值指示器背景阴影颜色string | (datum, index, data) => string-
indicatorBackgroundShadowBlur值指示器背景阴影的高斯模糊系数number | (datum, index, data) => number-
indicatorBackgroundShadowOffsetX设置阴影距值指示器背景的水平距离number | (datum, index, data) => number-
indicatorBackgroundShadowOffsetY设置阴影距值指示器背景的垂直距离number | (datum, index, data) => number-
indicatorBackgroundCursor值指示器背景鼠标样式。同 css 的鼠标样式。string | (datum, index, data) => stringdefault

在 Legend 组件中配置值指示器属性的时候,不是以对象的形式来配置,而是以 indicator前缀加属性的方式来配置。

({
legend: {
color: {
indicator: 'true',
indicatorFormatter: (d) => {},
//配置indicatorLabel的绘图属性
indicatorLabelFontSize: 16,
indicatorLabelFontFamily: 'sans-serif',
indicatorLabelFontWeight: 500,
indicatorLabelLineHeight: 20,
indicatorLabelTextAlign: 'center',
indicatorLabelTextBaseline: 'middle',
indicatorLabelFill: '#000',
indicatorLabelFillOpacity: 0.9,
indicatorLabelStroke: '#DAF5EC',
indicatorLabelStrokeOpacity: 0.9,
indicatorLabelLineWidth: 2,
indicatorLabelLineDash: [4, 8],
indicatorLabelOpacity: 1,
indicatorLabelShadowColor: '#d3d3d3',
indicatorLabelShadowBlur: 10,
indicatorLabelShadowOffsetX: 10,
indicatorLabelShadowOffsetY: 10,
indicatorLabelCursor: 'pointer',
// 配置indicatorBackground的绘图属性
indicatorBackgroundFill: '#000',
indicatorBackgroundFillOpacity: 0.9,
indicatorBackgroundStroke: '#DAF5EC',
indicatorBackgroundStrokeOpacity: 0.9,
indicatorBackgroundLineWidth: 2,
indicatorBackgroundLineDash: [4, 8],
indicatorBackgroundOpacity: 1,
indicatorBackgroundShadowColor: '#d3d3d3',
indicatorBackgroundShadowBlur: 10,
indicatorBackgroundShadowOffsetX: 10,
indicatorBackgroundShadowOffsetY: 10,
indicatorBackgroundCursor: 'pointer',
},
},
});

事件

图例组件对外暴露了一些特殊的事件,用于获取组件的交互信息。

事件类型描述类型
click 分类图例点击图例项时触发(item:Selection)=>void
mouseenter 分类图例鼠标移入图例项时触发(item: Selection)=>void
mouseleave 分类图例鼠标移出图例项时触发(item:Selection)=>void
valuechange 连续图例滑动窗口选取范围改变时触发(range: [number, number])=>void
indicate 连续图例指示器值改变时触发(value: number, range: [number, number])=>void

组件在图表渲染后才会出现,所以要在 afterrender 后挂载组件的事件,以下是一个例子:

chart.on('afterrender', () => {
const { canvas } = chart.getContext();
const { document } = canvas;
document.querySelector('.component').addEventListener('valuechange', (range) => {});
});
chart.on('afterrender', () => {
const { canvas } = chart.getContext();
const { document } = canvas;
document.querySelector('.component').addEventListener('valuechange', (range) => {});
});
chart.on('afterrender', () => {
const { canvas } = chart.getContext();
const { document } = canvas;
document.querySelector('.component').addEventListener('valuechange', (range) => {});
});

示例

自定义图例项图标(itemMarker)

在具体开发过程中,内置的图例项图标可能无法满足你的要求,不用担心,Ant Design Charts 提供了强大的自定义功能。

自定义符号(Symbol)

每一个符号都可以自定义,主要分为三步:

  • 定义符号路径。
  • 注册符号。
  • 使用符号。

首先我们来看看如何定义符号路径。一个符号路径是一个函数,该函数接受起始点的横向坐标 x、纵向坐标 y 和绘制半径,返回一个路径。

const triangle: SymbolFactor = (x, y, r) => {
const diffY = r * Math.sin((1 / 3) * Math.PI);
return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];
};
triangle.style = ['fill'];
import { type SymbolFactor } from '@antv/g2';
const triangle: SymbolFactor = (x, y, r) => {
const diffY = r * Math.sin((1 / 3) * Math.PI);
return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];
};
triangle.style = ['fill'];

接下来就是注册符号,通过调用 Ant Design Charts.register('symbol.${symbol}', Symbol) 来完成注册。其中 symbol 是符号的名字,Symbol 是定义好的符号路径。比如注册一个三角形的符号:

register('symbol.customTriangle', triangle);
import { register } from '@antv/g2';
register('symbol.customTriangle', triangle);

最后就是使用该符号了

'customTriangle';

使用图片

{
"tooltip": false,
"legend": {
"color": {
"itemMarkerSize": 40,
"maxRows": 1
}
},
"scale": {
"y": {
"nice": true
}
}
}

自定义图例(Legend)

Ant Design Charts 内置的图例是用 canvas 或者 svg 绘制的,如果希望能用 HTML 渲染图例,就可以按照如下几步自定义图例:

  • 关闭内置图例并且渲染图表。
  • 等待图表渲染完成,根据 scale 数据渲染 HTML 图例。
  • 添加交互(如果需要)。

首先是关闭内置图例,同时渲染图表。

{
"legend": false
}

然后是等待图表渲染完成,并且调用 legendColor 渲染 HTML 图例:

chart.render().then(legendColor);

在 legendColor 里我们首先需要把图例画出来,下面这个例子把图例画出来后,添加到了画布前面:

function legendColor(chart) {
const node = chart.getContainer();
const legend = document.createElement('div');
node.insertBefore(legend, node.childNodes[0]);
// ...
}

画出了图例之后,我们需要绘制图例项,这个数据从对应通道的比例尺获得:chart.getScale().color,并且通过 scale 的 domain 和 range 获得对应的名字和值。

function legendColor(chart) {
// ...
const scale = chart.getScale().color;
const { domain } = scale.getOptions();
const items = domain.map(() => {});
// ...
}
function legendColor(chart) {
// ...
const scale = chart.getScale().color;
const { domain } = scale.getOptions();
const items = domain.map(() => {});
// ...
}

绘制完图例项之后我们就应该给每个图例项通过 item.onclick 添加交互,收集当前选中的值,并且根据这个值去给图表的声明添加 Filter 转换,最后重新渲染图表。最后完整的实现如下:

滚动条

概述

Ant Design Charts 中 滚动条(Scrollbar) 可以用于过滤数据,可以和 x 或者 y 通道绑定的,滚动条默认都是关闭的。解决图表信息过于密集而无法完全展示的问题。

何时使用:内容是否超出显示区域取决于内容的多少以及显示区域的尺寸,当需要显示的内容在纵向方向上超过显示区域的大小时,应当使用垂直滚动条以控制显示的部分,横向滚动条同理。

{
"autoFit": true,
"scale": {
"y": {
"type": "log"
}
},
"scrollbar": {
"x": {
"ratio": 0.2,
"trackSize": 14,
"trackFill": "#000",
"trackFillOpacity": 1
},
"y": {
"ratio": 0.5,
"trackSize": 12,
"value": 0.1,
"trackFill": "#000",
"trackFillOpacity": 1
}
}
}

构成元素

legend-overview

使用方式

滚动条可以在 Mark 层级配置。在 Ant Design Charts 中,每个标记(Mark)都有自己的滚动条。如果标记对应的比例尺是同步的,那么滚动条也会合并。

({
scrollbar: {
x: {}, // x轴滚动条
y: {}, // y轴滚动条
},
});

滚动条也可以在 View 层级配置。滚动条具有传递性。视图上声明的滚动条会传递给 children 声明的标记,如果该标记有对应通道的滚动条,就合并;否则不影响。

({
scrollbar: {
x: {},
y: {},
},
});

配置项

属性描述类型默认值必选
ratio滚动条的比例,为单页显示数据在总数据量上单比例number0.5
value滚动条的起始位置, x轴默认值为 0, y轴默认为 1[0, 1]
slidable是否可以拖动booleantrue
scrollable是否支持滚轮滚动booleantrue
position滚动条相对图表方位stringbottom
isRound滚动条样式是否为圆角booleantrue
style滚动条样式配置,样式都可以直接在配置项中配置style
{
"autoFit": true,
"transform": [
{
"type": "stackY"
}
],
"scrollbar": {
"x": {
"ratio": 0.2,
"value": 0.1,
"scrollable": true,
"slidable": true,
"isRound": true,
"position": "top",
"thumbFillOpacity": 0.2,
"thumbFill": "#000",
"thumbStroke": "#000",
"trackFill": "#fa0",
"trackStroke": "#f00",
"trackLineWidth": 2,
"trackFillOpacity": 1,
"trackSize": 14,
"trackLength": 300
}
}
}

style

style 滚动条样式配置,内部做了处理,可以直接在配置项配置样式。具体样式配置,可参考 滚动条滑块(thumb)、滚动条滑轨(track)。

滚动条滑块(thumb)

属性描述类型默认值必选
thumbFill滚动条滑块填充色string#000
thumbFillOpacity滚动条滑块填充色透明度number0.15
thumbStroke滚动条滑块描边色string–
thumbLineWidth滚动条滑块描边宽度number–
thumbStrokeOpacity滚动条滑块描边色透明度number–
({
scrollbar: {
x: {
thumbFill: '#1173a1',
thumbFillOpacity: 1,
thumbStroke: 'red',
thumbLineWidth: 2,
thumbStrokeOpacity: 0.9,
},
y: {},
},
});

滚动条滑轨(track)

属性描述类型默认值必选
trackSize滚动条的轨道宽度number10
trackLength滚动条的轨道长度number
trackFill滚动条轨道填充色string-
trackFillOpacity滚动条轨道填充色透明度number0
trackLineWidth滚动条轨道描边宽度number–
trackStroke滚动条轨道描边色string–
trackStrokeOpacity滚动条轨道描边色透明度number–
({
scrollbar: {
x: {
trackSize: 20,
trackLength: 300,
trackFillOpacity: 1,
trackFill: 'red',
trackLineWidth: 2,
trackStroke: 'red',
trackStrokeOpacity: 0.4,
},
y: {},
},
});

事件

属性描述类型
valuechange发生滚动变化时触发,通过事件监听({detail: { oldValue: any; value: any }}) => void
{
"autoFit": true,
"scale": {
"y": {
"type": "log"
}
},
"scrollbar": {
"x": true
}
}

提示

概述

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

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

构成元素

tooltip

使用方式

{
"tooltip": {
"title": "name",
"items": [
"genre"
]
}
}

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

{
"interaction": {
"tooltip": {
"series": true
}
}
}

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

{
"interaction": {
"tooltip": {
"series": true
}
}
}

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

{
"tooltip": false
}

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

{
"interaction": {
"tooltip": false
}
}

尝试一下

配置项

配置项分为两个部分

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

  • interaction.tooltip 是 Ant Design Charts 的交互机制的一部分,属于 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桑基图等复合图形

interaction.tooltip

属性描述类型默认值适用于
body是否展示 tooltipbooleantrue
bounding控制Tooltip提示框的显示边界,超出会自动调整位置BBox图表区域大小
css设置 tooltip 样式css
crosshairs配置是否显示 crosshairs,详见crosshairs 配置boolean
crosshairsLineDash配置crosshairs虚线的间隔crosshairs 配置
crosshairsStroke配置crosshairs显示的颜色string
crosshairsStrokeWidth配置crosshairs十字辅助线的线条宽度number
crosshairsXStroke配置crosshairsX 轴显示的颜色string
crosshairsXLineDash配置crosshairsX 轴虚线的间隔crosshairs 配置
crosshairsXStroke配置crosshairsX 轴显示的颜色string
crosshairsXStrokeWidth配置crosshairsX 轴十字辅助线的线条宽度number
crosshairsYStroke配置crosshairsY 轴显示的颜色string
crosshairsYLineDash配置crosshairsY 轴虚线的间隔crosshairs 配置
crosshairsYStroke配置crosshairsY 轴显示的颜色string
crosshairsYStrokeWidth配置crosshairsY 轴十字辅助线的线条宽度number
disableNative禁用 pointerover 和 pointerout 事件booleanfalse
enterabletooltip 是否允许鼠标滑入booleanfalse
filteritem 筛选器(d: TooltipItemValue) => any-
groupName是否使用 groupNamebooleantrue
leading是否在时间间隔开始的时候更新提示信息booleantrue
marker是否展示 markerbooleantrue
marker${StyleAttrs}marker 的样式number | string-
markerTypemarkerType 是提示框(Tooltip)配置项中的一个属性,用于控制提示框中标记点(Marker)的样式'hollow' | undefinedundefined
mount指定提示框的挂载节点string | HTMLElement图表容器
position设置 tooltip 的固定展示位置,相对于数据点TooltipPosition
offset在位置方向上的偏移量[number, number] `[10, 10]
render自定义渲染tooltip内容[render] (#自定义渲染内容)(event, options) => HTMLElement | string
series是否是系列元素的 tooltipboolean多条折线、多组柱状图
shared相同 x 的元素是否共享 tooltipbooleanfalse
sortitem 排序器(d: TooltipItemValue) => any-
trailing是否在时间间隔结束的时候更新提示信息booleanfalse
trailing是否在时间间隔结束的时候更新提示信息booleanfalse
wait提示信息更新的时间间隔,单位为毫秒number50
type TooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
type BBox = { x: number, y: number, width: number, height: number };

crosshairs

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

{
"interaction": {
"legendFilter": false,
"elementPointMove": true,
"tooltip": {
"crosshairs": true,
"crosshairsStroke": "red",
"crosshairsLineDash": [
4,
4
],
"markerType": "hollow"
}
}
}

title

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

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

{
"tooltip": {}
}

在不需要设置 title 的时候,可以直接声明为一个数组:

{
"tooltip": [
"genre",
"sold"
]
}

其中完整的 title 结构如下:

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

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

{
"tooltip": {
"title": "sold",
"items": [
"genre"
]
}
}
{
"tooltip": {
"title": {
"field": "sold"
},
"items": [
{
"field": "genre"
}
]
}
}
  • 通道

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

{
"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[i].genre}`, // 指定 item 的名字
value: column.y.value[i], // 使用 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: '连接线自定义属性',
};
},
],
},
});

设置样式

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

tooltip
{
"transform": [
{
"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"
}
}
}
}
}

尝试一下

自定义渲染内容

有时候内置的 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>`;
}
function render(event, tooltipData) {
const { title, items } = tooltipData;
return `<div></div>`;
}

下面是一个简单的例子:

{
"interaction": {
"tooltip": {}
}
}

获取自定义 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[i].genre}`, // 指定 item 的名字
value: column.y.value[i], // 使用 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>`,
}
}
}
});

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

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

({
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: [
{
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>`;
},
},
},
});
({
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: [
{
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>`;
},
},
},
});
({
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: [
{
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>`;
},
},
},
});
({
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: [
{
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>`;
},
},
},
});
({
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: [
{
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>`;
},
},
},
});

配置 tooltip 显示隐藏事件

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

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

尝试一下

案例

title

{
"tooltip": {
"items": [
{}
]
}
}

item

null;

title + item

{
"tooltip": {
"items": [
{
"title": "a",
"items": [
{
"channel": "x"
},
{
"channel": "y"
}
]
}
]
}
}

手动控制展示/隐藏

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

{
"call": {}
}

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

隐藏的方式如下:

chart.emit('tooltip:hide');

开始/禁止交互

chart.emit('tooltip:disable');
chart.emit('tooltip:enable');

设置十字辅助线

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

  1. 设置crosshairs为true。
{
"interaction": {
"tooltip": {
"crosshairs": true,
"crosshairsXStroke": "red",
"crosshairsYStroke": "blue"
}
}
}
  1. 设置crosshairsX为true。
{
"interaction": {
"tooltip": {
"crosshairsX": true,
"crosshairsXStroke": "red",
"crosshairsYStroke": "blue"
}
}
}

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

example

设置提示点为空心圆

{
"interaction": {
"tooltip": {
"markerType": "hollow"
}
}
}
example

数据标签

Label 是将图形的一些数据信息,比如值,名称等映射到图形的文本上的方法。使用方式如下:

开始使用

label
const config = {
label: {
text: 'people',
position: 'outside',
transform: [{ type: 'overlapDodgeY' }],
}
}

选项(options)

Label 继承 G Text 所有属性样式配置,此外还有 position, selector, connector, background 和 transform 等更多配置。

属性描述类型默认值
fontSize文字大小number | Function<number>-
fontFamily文字字体string | Function<string>-
fontWeight字体粗细number | Function<number>-
lineHeight文字的行高number | Function<number>-
textAlign设置文本内容的当前对齐方式, 支持的属性:center | end | left | right | start,默认值为startstring | Function<string>-
textBaseline设置在绘制文本时使用的当前文本基线, 支持的属性:top | middle | bottom | alphabetic | hanging。默认值为bottomstring | Function<string>-
fill图形的填充色string | Function<string>-
fillOpacity图形的填充透明度number | Function<number>-
stroke图形的描边string | Function<string>-
strokeOpacity描边透明度number | Function<number>-
lineWidth图形描边的宽度number | Function<number>-
lineDash描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。[number,number] | Function<[number, number]>-
opacity图形的整体透明度number | Function<number>-
shadowColor图形阴影颜色string | Function<string>-
shadowBlur图形阴影的高斯模糊系数number | Function<number>-
shadowOffsetX设置阴影距图形的水平距离number | Function<number>-
shadowOffsetY设置阴影距图形的垂直距离number | Function<number>-
cursor鼠标样式。同 css 的鼠标样式,默认 'default'。string | Function<string>'default'
position标签位置配置string-
selector标签选择器。mark 通过指定的通道分组,通过指定选择器可以针对序列进行过滤索引,从序列中提取单个或多个值。分组的默认通道是系列。string|function-
connector是否展示文本和目标点之间的连接线,默认不展示boolean-
background是否展示文本背景框,默认不展示boolean-
transform标签转换,主要用于调整标签 (x,y) 位置,标签偏移、对齐等属性以实现想要的标签效果,内置多种标签布局,同时也支持回调的方式处理array|function-
formatter标签文本格式化type Formatter = (text:string, datum: Datum, index:number, data: Data) => string-

标签连接线样式配置,格式为: connector${style}, 如: connectorStroke 代表连接线描边色。

参数说明类型默认值
connectorStroke连接线描边色string-
connectorLineWidth连接线描边线宽number-
connector${style}更多连接线样式配置,参考 PathStyleProps 属性值--

标签文本背景框样式配置,格式为: background${style}, 如: backgroundFill 代表背景框填充色。

参数说明类型默认值
backgroundFill背景框填充色string-
backgroundRadius背景框圆角半径number-
backgroundPadding背景框内间距number[]-
background${style}更多背景框样式配置,参考 RectStyleProps 属性值--

数据标签支持使用 HTML 自定义标签,具体配置为:

参数说明类型默认值
render返回 HTML string 或者 HTMElement,使用 HTML 自定义复杂标签RenderFunc-
type RenderFunc = (text: string, datum: object, index: number) => String | HTMLElement;

FAQ

支持哪些 position?

在笛卡尔坐标系下,支持 9 种位置:'top', 'left', 'right', 'bottom', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'inside'。非笛卡尔坐标系下,支持 'outside', 'inside' 两种。

此外,针对面积图提供特殊 area,见 面积图特殊标签。针对 radial 类型的图标,增加了 spider、surround 两种类型。

position用途使用前使用后
spider调整标签沿坐标轴边沿两端对齐,适用于 polar 坐标系without-spiderspider
surround调整标签环形环绕做坐标系,适用于 polar 坐标系下的玫瑰图without-surroundsurround
area将面积图的标签显示在面积区域中心,并设置一定的旋转角度area

selector 如何使用?

selector 选择器可以对系列数据进行过滤索引。

通常适用于折线图、面积图等一个几何图形会对应一组数据的 mark

内置选择器有:'last', 'first',同时也支持 function 回调的方式自定义,如下:

{
selector: (data) => {
if (data.length) {
// 对于每个系列的数据,只保留索引等于 2 的标签
return data.filter((d, index) => index === 2);
}
return data;
};
}

更多

详见选项