logo

S2

  • 使用文档
  • API 文档
  • 图表示例
  • 在线体验
  • 更新日志
  • 所有产品antv logo arrow
  • 2.x
  • 简介
  • 快速上手
  • 基础教程
    • 基本概念
      Updated
    • 表形态
      • 透视表
        Updated
      • 明细表
        Updated
    • 字段标记
      Updated
    • 小计总计
    • 排序
      • 基础排序
        Updated
      • 组内排序
        Updated
    • 主题配置
      Updated
    • Tooltip
      Updated
    • 数据格式化
      New
    • 多行文本
      New
    • 国际化
    • 分页
      New
  • 进阶教程
    • 单元格渲染类型
      • 链接
      • 图片
        New
      • 视频
        New
      • 迷你图表
      • 结合@antv/g2
      • 自定义渲染
    • 自定义
      • 自定义 Hook
        Updated
      • 自定义行列头分组
        New
      • 自定义 Icon
        Updated
      • 自定义单元格对齐方式
        Updated
      • 自定义单元格宽高
        Updated
      • 自定义排序操作
        Updated
      • 自定义折叠/展开节点
        New
    • 交互
      • 基础交互
        Updated
      • 自定义交互
      • 隐藏列头
        Updated
      • 行列宽高调整
        Updated
      • 合并单元格
      • 滚动
        Updated
      • 复制与导出
        New
      • 高亮/选中单元格
        New
    • 分析组件
      • 简介
        New
      • 高级排序
        Updated
      • 维度切换
        Updated
      • 导出
        Updated
      • 分页
        Updated
      • 维度下钻
        Updated
    • 表格组件
      • 编辑表
      • 趋势分析表
        Updated
    • 高清适配
      Updated
    • 获取表格实例
    • 表格自适应
    • 获取单元格数据
      Updated
    • 注册 AntV/G 插件
      New
    • 透视组合图
      Experimental
    • Vue 3.0 组件 (停止维护)
  • 扩展阅读
    • 数据流处理
      • 透视表
      • 明细表
    • 布局流程
      • 透视表
      • 明细表
    • 性能介绍
      Updated
  • 贡献指南
  • 常见问题
  • S2 2.0 升级指南

字段标记

上一篇
明细表
下一篇
小计总计

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...

在数据可视化和分析中,字段标记是一种常用的功能,它允许用户通过可视化的方式强调数据中的关键信息。S2 是一个数据可视化库,支持灵活的字段标记功能:

  • 文本 (text) 字段标记
  • 背景 (background) 字段标记
  • 柱状图 (interval) 字段标记
  • 图标 (icon) 字段标记

下图直观展示了四种字段标记的形态:

preview

数据单元格完整的支持 4 种字段标记,而角头、行头、列头这些头部单元格只支持文本、背景和图标三种字段标记(柱状图不适用于头部单元格,业务上价值不大)。

快速上手

S2 字段标记特性通过配置 s2Options 中 Conditions 属性。

const s2Options = {
width: 600,
height: 600,
// 通过配置 conditions 实现字段标记
conditions: {
text: [
{
// 维度字段,支持正则 /^price+$/
field: "price",
mapping(fieldValue, data) {
return {
// fill 是文本字段标记下唯一必须的字段,用于指定文本颜色
fill: "#5B8FF9",
};
},
},
],
},
};

配置解释

Conditions 属性 可配置四种不同的字段,分别对应四种不同的字段标记。

  • text,background 和 interval ,icon 均是继承自 Condition 数组类型
    • 包含 field 和 mapping 两个字段。
    • 一个字段 ID 多次匹配到同一范围的字段标记规则,以最后一个规则为准.
  • icon 稍有不同,为 IconCondition 数组类型。
    • 多一个额外的 position 字段用于指定图标相对于文字的位置,定义图标相对于单元格文本的位置。这个位置可以是文本的左侧、右侧。

field

field 用于指定将字段标记应用于哪些字段上,其取值范围会因表的形态不同而不同:

  • 对于透视表,field 取值或正则匹配范围是 rows,columns,values,作用范围为行头、列头、角头和数据单元格。
  • 对于明细表,field 取值或正则匹配范围是 columns,作用范围为数据单元格。
透视表
明细表

​mapping

其中的重点是 mapping 函数,它用于处理字段标记的回调函数,如果 mapping 函数返回值为空,则表明不渲染该单元格的字段标记。

export type ConditionMapping<T = unknown> = (
fieldValue: number | string,
data: RawData,
cell?: S2CellType,
) => ConditionMappingResult<T>;

mapping 接收三个参数,分别是:

  • fieldValue: 当前单元格的值。
  • data: 如果是数据单元格,则是单元格对应的数据;如果是角头、行头、列头,则是单元格的 Node 信息。
  • cell: 对应当前单元格的实例,如果前两个参数不满足业务需求,可以通过这个参数获取任意你想要的数据。

不同的字段标记类型所需的返回值类型 ConditionMappingResult<T> 有所不同,主要是泛型 T 不同。S2 提供了完备的类型提示

类型提示

也可以通过 condition.ts 查看具体的类型定义。

🎨 字段标记详细的配置参考 Conditions API 文档。

特性

自定义图标位置

通过设置 icon 字段标记中的 position 属性,可以设置图标位于文本的左侧还是右侧。

const s2Options = {
conditions: {
icon: [
{
field: 'number',
position: 'left',
mapping() {
return {
icon: 'CellUp',
fill: '#2498D1',
};
},
},
],
},
}

price 字段的图标位于文本右侧,cost 字段的图标位于文本左侧:

当同时存在自定义 Icon 时,Condition Icon 单元格 value 是强关联的,所以将 condition icon 放在紧贴文本的左右侧,即:

  • [header action icons] [condition icon] [text]
  • [text] [condition icon] [header action icons]

自定义 Icon 详情,可查看 自定义 Icon 章节

自定义柱状图范围

通过显示指定 interval 字段标记中的 mapping 函数返回值 isCompare 属性值为 true,并指定 maxValue 和 minValue 的值,可以自定义柱状图的区间范围。

提示

如果 mapping 函数返回值中的 isCompare 属性值为 false 或者不返回该属性。此时 maxValue 和 minValue 默认会以所有图表数据中该字段的最大最小值为区间范围。

也可以通过 cell.getValueRange() 获取默认的最大最小值数值区间,动态决定是否自定义柱状图范围。

const s2Options = {
conditions: {
interval: [
{
field: 'number',
mapping(value, data, cell) {
const defaultValueRange = cell.getValueRange();
console.log('默认的最大最小值数值区间:', defaultValueRange);
return {
fill: '#80BFFF',
// 自定义柱状图范围
isCompare: true,
maxValue: 8000,
minValue: 300,
fieldValue: Number(value) > 7900 ? 10 : value,
};
},
},
],
}
}

字段标记默认都是使用当前单元格的 value 作为绘制的依据,但在柱状图中,因为可以自定义柱状图的范围,那么也可能需要根据范围,同时对当前的 value 进行处理,使用新的 value 作为绘制的依据,此时可以通过 mapping 函数返回值中指定 fieldValue 重新指定当前格子的绘制依据。

price 字段使用自定义模式,cost 字段使用默认模式:

双向柱状图

当柱状图的区间有正负之分时,并搭配 mapping 函数返回值的 fill 属性,即可绘制出带有不同颜色的正负双向柱状图:

const s2Options = {
conditions: {
interval: [
{
field: 'number',
mapping(value) {
return {
fill: value >= 0 ? '#80BFFF' : '#F4664A',
};
},
},
],
}
}

​📊 查看更多 字段标记示例。

渐变柱状图

S2 的底层图形绘制采用 AntV/G 渲染引擎 ,借助其强大的绘制能力,fill 字段不仅仅是颜色属性,还可以使用 渐变色、纹理 等。

const s2Options = {
conditions: {
interval: [
{
field: 'number',
mapping(fieldValue) {
const maxValue = 7789;
const minValue = 352;
const rage = (fieldValue - minValue) / (maxValue - minValue);
const color = getGradient(rage, '#95F0FF', '#3A9DBF');
return {
fill: `l(0) 0:#95F0FF 1:${color}`,
isCompare: true,
maxValue,
};
},
},
],
}
}

price 字段使用渐变色:

​📊 查看更多 字段标记示例。

开启文字智能反色

通过显示指定 background 字段标记中的 mapping 函数返回值 intelligentReverseTextColor 属性值为 true。 当标记背景颜色较暗且文本颜色与背景颜色组合不符合 WCAG2.0 指南的 AA 级标准时,文本颜色将变为白色。当标记背景颜色明亮时,文本颜色默认为黑色。 优先级: background condition 的 intelligentReverseTextColor < text condition 的 fill

const s2Options = {
conditions: {
background: [
{
field: 'number',
mapping() {
return {
// fill 是背景字段下唯一必须的字段,用于指定文本颜色
fill: '#000',
intelligentReverseTextColor: true,
};
},
},
],
}
}

区分角头、行头、列头

在透视表模式中,如果字段标记对应的 field 是行头或者列头的维度,那么会同时将对应的角头单元格也进行标记,可以通过 mapping 函数三个参数做区分:

​📊 查看更多 字段标记示例。