饼图(Pie)
本章目标:把饼图在 EasyChart 中“数据字段怎么解释、布局/聚合/图例/交互如何生效、哪些行为有隐藏前提”的规则讲清楚,并对应到 Inspector 字段。
1. 适用场景
- 展示“占比/构成”
- 强调每个分类在整体中的比例
不适合:
- 类别过多(通常 > 8~12 个会很难读)
- 需要精确对比微小差异(更建议条形图)
2. 最小可用配置(Checklist)
coordinateSystem:Pie 不依赖 Cartesian/Polar 坐标系(按你的 Profile 现有设置即可)- 添加 1 条
Serie:type = Piesettings = PieSettingsseriesData至少 1 个点
- 确保每个点的
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 layout(PieLayoutSettings)
常用字段:
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 hover(PieHoverSettings)
hover.enabled:是否启用悬停交互hover.explodeType:Translate:整体平移Pull:拉伸(拉出)Color:变亮Stroke:描边强调
hover.explodeDistance:平移/拉伸距离(像素)
4.3 aggregation(PieAggregationSettings)
当分类很多时,可以把小项合并为 Others:
aggregation.enabled = truekeepTopN:保留前 N 个,其余合并sortByValue:是否按value值排序后再取 TopNothersName: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/Centeroffset:偏移
8. 常见坑(按现象排查)
-
某些切片不显示
- 检查该点
value是否<= 0
- 检查该点
-
切片名称不是我想要的
- 推荐:直接填写
SeriesData.name - 如果依赖 labels:确保你确实有一个 Category 轴并填写了
labels,且顺序与数据点索引一致
- 推荐:直接填写
-
切片颜色每次不一样/难以控制
- 对需要固定颜色的切片:给该点设置
useColor=true+color
- 对需要固定颜色的切片:给该点设置
-
隐藏/交互状态不稳定
- 确保每个点的
SeriesData.id稳定(不要每次刷新都重新生成一套新 id)
- 确保每个点的
9. 下一章
- 圆环图(RingChart):
16-RingChart.md