DonutChart 环形图

支持单值/多值、自动分类、中心文本、筛选与工具栏,移动端优化良好。

代码演示

API

DonutChartProps

属性说明类型默认值版本
data数据源DonutChartData[]--
configs配置列表(可多视图)DonutChartConfig[][{ showLegend: true }]-
width宽度(px),移动端自适应number200-
height高度(px),移动端自适应,移动端有最大尺寸限制number200-
className自定义类名string--
theme根容器主题,与 configs[].theme 配合;dark 时容器内嵌 Ant Design 暗色算法,工具栏/筛选与画布一致'light' | 'dark''light'-
title标题(同时用于工具栏)string--
showToolbar是否显示下载/全屏等工具按钮booleantrue-
onDownload点击下载回调(未传时使用内置下载)() => void--
dataTime数据时间string--
filterList筛选项列表(不传不显示筛选器)string[]--
selectedFilter外部受控的当前筛选值string--
onFilterChange筛选变化回调(value: string) => void--
enableAutoCategory是否启用自动分类(依据 category)booleantrue-
singleMode是否启用单值模式:每条数据一个独立环形图并自动着色booleanfalse-
toolbarExtra头部工具条额外按钮React.ReactNode--
renderFilterInToolbar是否将过滤器渲染到工具栏(当为 true 时,ChartFilter 会显示在工具栏右侧)booleanfalse-
statisticChartStatistic组件配置:object表示单个配置,array表示多个配置ChartStatisticConfig | ChartStatisticConfig[]--

ChartContainerProps(继承)

属性说明类型默认值版本
classNames分层类名:root、toolbar、statisticContainer、filter、wrapper、chartChartClassNames--
loading加载态booleanfalse-
style根容器内联样式React.CSSProperties--
styles与各层 DOM 对应的内联样式ChartStyles--
variant容器描边变体'outline' | 'borderless'--

DonutChartData

字段说明类型默认值版本
category分类(用于可选自动分类与筛选)string--
label标签(将用于图例与中心文字)(必填)string--
value数值(可自动计算百分比)(必填)number--
filterLabel二级筛选标签(可选)string--

DonutChartConfig

字段说明类型默认值版本
lastModified最近更新时间(展示用)string--
theme单视图主题,与根级 theme 配合控制画布与图例配色'light' | 'dark''light'-
cutout中心空心占比(如 '60%')string | number--
chartStyle图表样式:饼图或环形图'pie' | 'donut''donut'-
showLegend是否显示图例booleantrue-
showTooltip是否显示 tooltipbooleantrue-
legendPosition图例位置'top' | 'left' | 'bottom' | 'right''right'(移动端自动底部)-
backgroundColor每项对应一个扇区颜色string[]内置色板-
borderColor边框颜色string--
showDataLabels是否展示数据标签与指示线:开启后扇区外显示数值/占比及连接线,tooltip 中也会展示原始数值booleanfalse-

ChartStatisticConfig

ChartStatisticConfig 继承自 ChartStatistic 组件的所有属性,详细 API 请参考 ChartStatistic 文档。

字段说明类型默认值版本
title指标标题string--
tooltip鼠标悬停时显示的提示信息string--
value显示的数值number | string | null | undefined--
precision数值精度(小数点后位数)number--
groupSeparator千分位分隔符string','-
prefix数值前缀(如货币符号)string''-
suffix数值后缀(如单位)string''-
formatter自定义格式化函数,优先级高于其他格式化选项(value: number | string | null | undefined) => React.ReactNode--
className自定义类名string''-
size组件尺寸'small' | 'default' | 'large''default'-
block是否使用块级布局(弹性占用空间,多个时平分父容器宽度)booleanfalse-
extra右上角自定义内容(图标、按钮等)React.ReactNode--

说明

  • 移动端字体与布局会自动缩放优化,避免中心文本溢出。
  • 开启 singleMode 时,每条 data 将渲染独立的小环形图,便于对比多个单值。
  • statistic 属性支持数组形式,可同时渲染多个静态数据组件,如 [{title: '总用户数', value: 15420}, {title: '活跃用户', value: 8963}]。

数据标签与指示线(showDataLabels)

  • 默认:不展示扇区上的数值、占比及指示线,仅通过 tooltip 展示占比(如「男性 (30%)」)。
  • 开启:在 configs 中设置 showDataLabels: true 后:
    • 扇区外展示「类别: 占比%」文案,并用平滑指示线连接扇区与文案;
    • 仅对占比 ≥ 2% 的扇区展示标签与指示线,并在密集场景自动做防重叠稀疏;
    • tooltip 中会同时展示原始数值(如「男性: 30 (30%)」);
    • 小屏下指示线更短,桌面略长,以减少溢出。
  • 适用场景:多分类、大数据量时需「不悬浮即可见」数值与占比,可开启;单值或少量分类建议保持默认。

图例分页

  • 当图例项超过 12 条时,自动启用分页,底部显示「< 1/4 >」形式的分页控件。
  • 小屏下图例区域为 flex 布局:列表可滚动,分页固定在底部始终可见。