logo

F2

  • 教程
  • 组件API
  • 图表示例
  • 所有产品antv logo arrow
  • 5.10.0
  • 顶层 API - F2
  • 组件 - Component
  • 画布 - Canvas
  • 时间轴 - Timeline
  • 图表 - Chart
    • 图表 - Chart
    • 几何标记 - Geometry
    • 线 - Line
    • 区间 - Interval
    • 点 - Point
    • 面积 - Area
    • K 线图 - Candlestick
    • 坐标轴 - Axis
    • 图例 - Legend
    • 提示 - tooltip
    • 饼图标签 - PieLabel
    • 标注 - Guide
      • 标签标注 - TagGuide
      • 点标注 - PointGuide
      • 辅助线标注 - LineGuide
      • 矩形标注 - RectGuide
      • 图片标注 - ImageGuide
      • 文本标注 - TextGuide
      • 标注 - Guide
    • 滚动条 - ScrollBar
    • 放大镜 - Magnifier
  • 仪表盘 - Gauge
  • 旭日图 - Sunburst
  • 矩形树图 - Treemap

旭日图 - Sunburst

上一篇
仪表盘 - Gauge
下一篇
矩形树图 - Treemap

资源

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

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会
weavefoxWeaveFox-智能研发技术社区

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
weavefoxWeaveFox-前端智能研发
© Copyright 2026 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

Sunburst 组件用于展示层级数据的径向图表,通过同心圆的形式展示数据的层级结构。每一层圆环代表数据的一个层级,扇形的大小表示数据的数值,适合展示具有层级关系的数据结构。

何时使用

  • 需要展示具有层级结构的数据
  • 需要通过径向布局展示数据比例
  • 文件系统目录结构可视化
  • 组织架构层级展示
  • 预算分配的层级分解
  • 市场份额的层级分析

TypeScript 类型定义

interface ColorAttrObject {
/** 用于颜色映射的字段名 */
field: string;
/** 颜色范围数组 */
range?: any[];
/** 自定义颜色映射函数 */
callback?: (value) => any;
}
interface SunburstProps {
/** 数据源,必须是具有层级结构的数组 */
data: Data;
/** 坐标系配置,旭日图通常使用极坐标系 polar */
coord?: CoordProps;
/** 颜色映射配置,可以是颜色数组或包含字段映射的对象 */
color?: any[] | ColorAttrObject;
/** 用于确定扇形大小的数值字段名 */
value?: string;
/** 是否对数据进行排序,默认为 true,按数值大小降序排列 */
sort?: boolean | Function;
/** 点击事件回调函数 */
onClick?: (event) => void;
}

Usage

import { Canvas, Sunburst } from '@antv/f2';
const data = {
name: 'root',
children: [
{
name: 'A',
children: [
{ name: 'A-1', value: 10 },
{ name: 'A-2', value: 20 },
],
},
{
name: 'B',
children: [
{ name: 'B-1', value: 15 },
{ name: 'B-2', value: 25 },
],
},
],
};
const colors = [
'#5B8FF9', '#61DDAA', '#65789B', '#F6BD16',
'#7262fd', '#78D3F8', '#9661BC', '#F6903D',
'#008685', '#F08BB4'
];
<Canvas context={context} pixelRatio={window.devicePixelRatio}>
<Sunburst
data={data.children}
coord={{ type: 'polar' }}
color={{ field: 'name', range: colors }}
value="value"
/>
</Canvas>

Props

基础配置

属性类型默认值说明
dataArray-数据源,必须是具有层级结构的数组(children 嵌套)
valuestring-用于确定扇形大小的数值字段名
coordCoordProps{ type: 'polar' }坐标系配置,旭日图通常使用极坐标系

样式配置

属性类型默认值说明
colorany[] | ColorAttrObject主题色颜色映射配置,可以是颜色数组或包含字段映射的对象

高级配置

属性类型默认值说明
sortboolean | Functiontrue是否对数据进行排序,默认按 value 降序排列
onClick(event) => void-点击事件回调函数

ColorAttrObject

属性类型说明
fieldstring用于颜色映射的字段名
rangeany[]颜色范围数组
callback(value) => any自定义颜色映射函数

用法示例

基础旭日图

最简单的旭日图配置:

const data = {
name: 'root',
children: [
{
name: 'Category A',
children: [
{ name: 'Item 1', value: 10 },
{ name: 'Item 2', value: 20 },
{ name: 'Item 3', value: 15 },
],
},
{
name: 'Category B',
children: [
{ name: 'Item 4', value: 25 },
{ name: 'Item 5', value: 30 },
],
},
],
};
<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
/>
</Canvas>

自定义颜色

使用自定义颜色数组:

const colors = [
'#5B8FF9', '#61DDAA', '#F6BD16',
'#7262fd', '#78D3F8', '#9661BC'
];
<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
color={colors}
/>
</Canvas>

使用颜色映射对象

通过 ColorAttrObject 配置颜色:

<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
color={{
field: 'name',
range: ['#1890ff', '#52c41a', '#faad14', '#f5222d'],
}}
/>
</Canvas>

禁用排序

不进行数据排序,保持原始顺序:

<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
sort={false}
/>
</Canvas>

自定义排序函数

使用自定义函数进行排序:

<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
sort={(a, b) => {
// 按名称排序
return a.name.localeCompare(b.name);
}}
/>
</Canvas>

点击事件

监听扇形点击事件:

<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
onClick={(event) => {
console.log('点击了扇形:', event);
}}
/>
</Canvas>

多层级数据

展示 3 层或更多层级的数据:

const data = {
name: 'root',
children: [
{
name: 'Level 1-A',
children: [
{
name: 'Level 2-A',
children: [
{ name: 'Item 1', value: 5 },
{ name: 'Item 2', value: 10 },
],
},
{
name: 'Level 2-B',
children: [
{ name: 'Item 3', value: 8 },
{ name: 'Item 4', value: 12 },
],
},
],
},
],
};
<Canvas context={context}>
<Sunburst
data={data.children}
value="value"
color={{ field: 'name' }}
/>
</Canvas>

数据格式

旭日图需要具有层级结构的数据,示例如下:

const data = {
name: 'root',
children: [
{
name: '第一层级',
children: [
{
name: '第二层级',
children: [
{ name: '叶子节点', value: 100 },
],
},
],
},
],
};
// 使用时只传入 children 数组
<Sunburst data={data.children} value="value" />

注意事项:

  • 数据必须是嵌套的 children 结构
  • 叶子节点需要包含 value 字段
  • name 字段用于颜色分组

常见问题

旭日图不显示

确保数据结构正确,且叶子节点包含 value 字段:

// 错误:缺少 value 字段
const data = [
{ name: 'A' },
{ name: 'B' },
];
// 正确:包含 value 字段
const data = [
{ name: 'A', value: 10 },
{ name: 'B', value: 20 },
];

层级不正确

确保使用嵌套的 children 结构:

// 错误:扁平结构
const data = [
{ name: 'A', value: 10 },
{ name: 'B', value: 20, parent: 'A' },
];
// 正确:嵌套 children 结构
const data = [
{
name: 'A',
children: [
{ name: 'B', value: 20 },
],
},
];

颜色不区分

确保 color.field 指定的字段在数据中存在:

// 正确配置颜色映射
<Sunburst
data={data.children}
color={{ field: 'name' }} // name 字段用于分组
value="value"
/>

排序不生效

检查 sort 属性设置:

// 禁用排序
<Sunburst sort={false} />
// 自定义排序函数
<Sunburst sort={(a, b) => a.name.localeCompare(b.name)} />

坐标系配置

旭日图必须使用极坐标系:

<Sunburst
data={data.children}
coord={{ type: 'polar' }} // 必须设置为 polar
value="value"
/>

注意事项

  1. 数据结构:数据必须是嵌套的 children 结构,不能是扁平数组
  2. value 字段:叶子节点必须包含 value 字段,用于确定扇形大小
  3. 极坐标系:coord.type 必须设置为 'polar',否则无法正确渲染
  4. 颜色映射:color.field 指定的字段用于根节点分组,所有子节点继承父节点颜色
  5. 排序默认行为:sort 默认为 true,按 value 值降序排列