拼ui 一些业务逻辑x实现

This commit is contained in:
2026-03-19 06:15:09 +08:00
parent f5c6f143c0
commit 49e45ac464
1118 changed files with 246518 additions and 5368 deletions
@@ -0,0 +1,174 @@
# 饼图(Pie
本章目标:把饼图在 EasyChart 中“数据字段怎么解释、布局/聚合/图例/交互如何生效、哪些行为有隐藏前提”的规则讲清楚,并对应到 Inspector 字段。
---
## 1. 适用场景
- 展示“占比/构成”
- 强调每个分类在整体中的比例
不适合:
- 类别过多(通常 > 8~12 个会很难读)
- 需要精确对比微小差异(更建议条形图)
---
## 2. 最小可用配置(Checklist
1. `coordinateSystem`Pie 不依赖 Cartesian/Polar 坐标系(按你的 Profile 现有设置即可)
2. 添加 1 条 `Serie`
- `type = Pie`
- `settings = PieSettings`
- `seriesData` 至少 1 个点
3. 确保每个点的 `value > 0`
> 注意:Pie 当前会忽略 `value <= 0` 的点。
---
## 3. 重要限制(按运行时代码)
- **只绘制第一条可见 Pie serie**:当前渲染器会遍历 `Data.Series`,找到第一条 `type=Pie` 且可见的 serie 绘制后就 `break`
- Pie 的切片隐藏状态来自 `ChartInteractionState.HiddenPieSliceIds`,会在图例点击时写入/移除。
---
## 4. SeriesData 字段解释(按运行时代码)
Pie 主要使用:
- `value`:该切片的数值(权重)
- `name`:切片名称(推荐填写)
- `useColor + color`:切片自定义颜色(可选)
- `id`:切片稳定标识(用于隐藏/交互状态,建议保持稳定)
### 4.1 最推荐写法:显式写 name + value
- `SeriesData.name = "苹果"`
- `SeriesData.value = 12`
### 4.2 name 为空时的名称来源
`SeriesData.name` 为空时,Pie 会尝试从 **labels** 获取名称,但有一个前提:
- 如果 `ChartData.CoordinateSystem == None`(通常是纯 Pie/无坐标系图),运行时会 **跳过 labels 兜底**,只使用 `SeriesData.name`
在非 None 坐标系下,名称兜底顺序是:
- 优先使用 `Data.Cartesian.xAxisId` 对应的 Category 轴 labels
- 若找不到,再使用任意一个 Category 轴 labels
- 最后兜底:`Slice {index}`
> 因此:如果你不想依赖轴配置,建议直接填 `SeriesData.name`。
### 4.3 颜色来源
- 若点上 `useColor=true`:使用 `SeriesData.color`
- 否则:使用内置调色板按顺序分配
---
## 5. 常用配置(PieSettings
Pie 的 `settings``PieSettings`,主要包含:
- `layout`:布局(角度/半径/间隙/居中偏移等)
- `hover`:悬停交互(explode
- `aggregation`:聚合(TopN + Others
- `legend`:Pie 专用图例配置(只在“纯 Pie 图表”场景下替代全局 legend)
### 4.1 layoutPieLayoutSettings
常用字段:
- `startAngleDeg`:起始角度(默认 -90 让第一片从“正上方”开始)
- `clockwise`:顺时针/逆时针
- `angleRangeDeg`:角度范围(默认 360,做“半圆饼”可设 180 等)
- `outerRadius`:外半径
- `<= 0`:自动
- `0~1`:按控件大小比例
- `> 1`:像素
- `innerRadius`:内半径(Pie 通常为 0;>0 会变成“中间有洞”的效果,但更推荐用 RingChart 类型做圆环)
- `innerRadiusColor`:内圈填充颜色
- `sliceGapPx`:切片间隙(像素)
- `sliceGapType`:间隙计算方式(Radial/Translate/Uniform
- `cornerRadius`:圆角(像素,受切片厚度限制)
- `plot.padding`:留白(避免切片/外侧标签被裁剪)
- `plot.centerOffset`:中心偏移
### 4.2 hoverPieHoverSettings
- `hover.enabled`:是否启用悬停交互
- `hover.explodeType`
- `Translate`:整体平移
- `Pull`:拉伸(拉出)
- `Color`:变亮
- `Stroke`:描边强调
- `hover.explodeDistance`:平移/拉伸距离(像素)
### 4.3 aggregationPieAggregationSettings
当分类很多时,可以把小项合并为 `Others`
- `aggregation.enabled = true`
- `keepTopN`:保留前 N 个,其余合并
- `sortByValue`:是否按 `value` 值排序后再取 TopN
- `othersName`Others 的名称
- `useOthersColor + othersColor`Others 颜色
> 注意:聚合只在 `keepTopN > 0` 且切片数量超过 N 时生效。
---
## 6. 图例(PieLegendSettings)与“隐藏切片”交互
当图表是“纯 Pie 图表”(只包含 Pie/RingChart/Pie3D 且没有其它类型)时:
- 图例会优先使用 `PieSettings.legend`(或 RingChartSettings/Pie3DSettings 上的 legend),而不是 `ChartData.legend`
- 点击图例条目会切换 `HiddenPieSliceIds`
- 普通切片:`SeriesData.id`(若为空则用索引字符串)
- 聚合的 Others:固定使用 `__ec_pie_others__`
`PieLegendSettings.source` 会影响“图例条目从哪里来”:
- `Slice`:每个切片一条(默认)
- `RingSlice`:为 RingChart/RingSlice 场景提供 label 来源(优先 PolarAxes.angleAxis.labels
- `Series`:每条 serie 一条(不再是切片级)
---
## 7. 标签(SerieLabelSettings
Pie 标签由 `Serie.labelSettings` 控制:
- `show`:是否显示
- `fontSize / color / decimalPlaces`:字体与数值格式
- `showName`:是否在标签里显示切片名称
- `position``Outside/Inside/Center`
- `offset`:偏移
---
## 8. 常见坑(按现象排查)
- **某些切片不显示**
- 检查该点 `value` 是否 `<= 0`
- **切片名称不是我想要的**
- 推荐:直接填写 `SeriesData.name`
- 如果依赖 labels:确保你确实有一个 Category 轴并填写了 `labels`,且顺序与数据点索引一致
- **切片颜色每次不一样/难以控制**
- 对需要固定颜色的切片:给该点设置 `useColor=true` + `color`
- **隐藏/交互状态不稳定**
- 确保每个点的 `SeriesData.id` 稳定(不要每次刷新都重新生成一套新 id)
---
## 9. 下一章
- 圆环图(RingChart):`16-RingChart.md`