版本:V5.1.1
背景
饼图、折线图、柱状图、矩形树图等图表都可能采用标签来展示详细数据。但在大数据量下针对不同的图表可能存在(包含但不仅限)如下情况:
- 饼图要防止标签的位置已存在标签,需要对当前待绘制的标签移动位置以防止重叠。
- 折线图数据间隔过短导致标签重叠,需要间隔显示。
- 矩形树图数据块太小无法容纳标签需要隐藏。
面对上述情况应该如何应对?我们尝试从ECharts的源码中来一探究竟。
结论
饼图
饼图的label
防重大致步骤如下:
- 根据饼图的半径,指示线的长度初步计算标签的位置。
- 分左右处理标签的重叠问题
- 在垂直方向将标签在可用空间内无重叠分布
- 如果无重叠分布后所需空间大于可用空间则均匀分布
- 分上下分别计算所需空间与标签半径(饼图的半径加指示线的长度)的大小以较大的作为长轴,标签半径作为短轴构建椭圆。
- 将标签均匀分布在椭圆方程上
- 渲染时候如果标签仍会与已有标签重叠则隐藏该部分标签,如果标签文字的长度大于标签的空间大小则对标签文字进行截断
折线图与矩形树图
折线图与矩形树图则相对简单,只经过了对标签的简单布局以及LabelManager.ts中对仍重叠的标签的隐藏处理,即饼图防重中的步骤7。