圆环图(RingChart)

本章目标:说明 RingChart 的真实含义(它不是 donut pie),并把它在 EasyChart 中的 SeriesData 字段解释、RingChartSettings 配置与 Pro/基础差异对齐到运行时代码。


1. RingChart 是什么?(非常重要)

在 EasyChart 当前实现中:

  • SerieType.RingChart 渲染的是 多条“进度环”(每个数据点一条环)
  • 每条环都是 完整 360° 的底环 + 一段进度弧
  • 它不是“多个 slice 分割圆周”的饼图

如果你想要“占比构成”的圆环饼图(donut pie):

  • 目前更接近 SerieType.Pie + layout.innerRadius > 0
  • 但推荐仍按你的设计决定:
  • - 构成占比:用 Pie - 多指标进度/完成率:用 RingChart


2. 重要说明(Pro 功能)

  • SerieType.RingChart 的渲染器由 EasyChartProBootstrap 注册。
  • 未安装/启用 Pro 时,该 serie 通常不会显示。

3. 最小可用配置(Checklist)

  1. 添加 1 条 Serie
  2. - type = RingChart - settings = RingChartSettings - seriesData 至少 1 个点

  3. 每个点的 value > 0
注意:RingChart 会忽略 value <= 0 的点。

4. SeriesData 字段解释(按运行时代码)

RingChart 主要使用:

  • value:环的进度“原始值”
  • name:环的名称
  • useColor + color:环颜色(点级颜色覆盖)
  • id:稳定标识(用于 legend/隐藏状态,建议保持稳定)

4.1 Percent 模式(默认):value 同时支持 0~1 和 0~100

RingChartSettings.valueMapping.mode = Percent(默认)时:

  • value <= 0:该环会被过滤
  • 0~1:按比例(0.72 = 72%)
  • > 1:按百分比(72 = 72%,运行时会除以 100)

建议:团队统一用一种写法(全 0~1 或全 0~100),避免误用。

4.2 Range 模式:把 value 映射到 0..1

RingChartSettings.valueMapping.mode = Range 时:

  • 会先确定范围 min/max
  • - autoRange=true:从所有 ring 的 value 自动求范围 - autoRange=false:使用 minValue/maxValue

  • 再把 value 映射为 (value-min)/(max-min) 并 clamp 到 0..1

4.3 name 为空时的名称来源

SeriesData.name 为空时,RingChart 会尝试从 labels 兜底:

  • ChartData.CoordinateSystem == None:不会使用 labels 兜底,最终会退回到 Ring {i}
  • 否则优先:Data.PolarAxes.angleAxis.labels[i]
  • 再否则:Cartesian/任意 Category 轴的 labels[i]
  • 最终兜底:Ring {i}

如果你不想依赖 PolarAxes 配置,建议直接填 SeriesData.name


5. Inspector 对应字段(RingChartSettings)

  • series[i].type = RingChart
  • series[i].settings:实际类型为 RingChartSettings
  • - layout:角度/半径/内外环/留白/中心偏移 - valueMapping:Percent/Range 映射规则 - hover:悬停强调(Translate/Pull/Color/Stroke) - legend:RingChart 的图例设置(纯 Pie 图表时生效) - showBackground/backgroundAlpha/backgroundColor:背景环 - cornerRadius:端头圆角 - ringGapPx:环与环间距

5.1 layout(RingChartLayoutSettings)

常用字段:

  • startAngleDeg:起始角度
  • clockwise:顺/逆时针
  • angleRangeDeg:默认 360;可做“半环进度”
  • outerRadius:外半径(<=0 自动;0~1 比例;>1 像素)
  • innerRadius:内半径(0~1 比例或像素)
  • plot.padding:留白(避免 hover/标签被裁剪)
  • plot.centerOffset:中心偏移

5.2 hover(PieHoverSettings)

  • hover.enabled:是否启用
  • hover.explodeType
  • - Translate:整条环平移 - Pull:拉伸(拉出) - Color:变亮 - Stroke:描边强调

  • hover.explodeDistance:平移/拉伸距离(像素)

5.3 背景环与间距

  • showBackground:是否绘制背景环
  • backgroundAlpha:背景环透明度(最终会乘到颜色 alpha 上)
  • backgroundColor:背景环颜色(alpha=0 时会回退用 ring 本身颜色)
  • ringGapPx:环与环的间距
  • cornerRadius:端头圆角(受环厚度限制)

6. 图例与隐藏交互(与 Pie 共用 HiddenPieSliceIds)

  • RingChart 与 Pie 共用 ChartInteractionState.HiddenPieSliceIds
  • 每条环的隐藏 key:优先 SeriesData.id,否则使用索引字符串。
  • 图例条目 label 的来源受 PieLegendSettings.source 影响:
  • - RingSlice 会优先从 polarAxes.angleAxis.labels 取名称。


7. 标签(SerieLabelSettings)

RingChart 的标签同样使用 Serie.labelSettings

  • show:是否显示
  • showName:是否显示 name
  • decimalPlaces:数值小数位(注意:这里显示的是原始 value,不是自动乘 100 的百分比文本)
  • position
  • - Outside:外侧标签 + 引导线 - Center:贴在环中间


6. 常见坑(按现象排查)

  • 我以为它是 donut pie,但显示不对
  • - 这是多环进度图:每个点是一条“进度环”

  • 进度不对(比如填 75 结果几乎满圈)
  • - value>1 会按百分比除以 100 - 如果你想 75%:用 0.7575

  • 某些环不显示
  • - 检查 value <= 0 是否被过滤

  • 交互/隐藏状态不稳定
  • - 确保 SeriesData.id 稳定


8. 深入参考

  • 饼图(构成占比):15-PieChart.md
  • Series 数据结构:00-WorkflowAndLibrary.md