ECharts源码解析之TextBackground
ECharts源码解析之TextBoundingRect
ECharts源码解析之SVGRender
ECharts源码解析之标签防重(autoLabelLayout)
版本:V5.1.1
背景
饼图、折线图、柱状图、矩形树图等图表都可能采用标签来展示详细数据。但在大数据量下针对不同的图表可能存在(包含但不仅限)如下情况:
- 饼图要防止标签的位置已存在标签,需要对当前待绘制的标签移动位置以防止重叠。
- 折线图数据间隔过短导致标签重叠,需要间隔显示。
- 矩形树图数据块太小无法容纳标签需要隐藏。
面对上述情况应该如何应对?我们尝试从ECharts的源码中来一探究竟。
结论
饼图
饼图的label
防重大致步骤如下:
- 根据饼图的半径,指示线的长度初步计算标签的位置。
- 分左右处理标签的重叠问题
- 在垂直方向将标签在可用空间内无重叠分布
- 如果无重叠分布后所需空间大于可用空间则均匀分布
- 分上下分别计算所需空间与标签半径(饼图的半径加指示线的长度)的大小以较大的作为长轴,标签半径作为短轴构建椭圆。
- 将标签均匀分布在椭圆方程上
- 渲染时候如果标签仍会与已有标签重叠则隐藏该部分标签,如果标签文字的长度大于标签的空间大小则对标签文字进行截断
折线图与矩形树图
折线图与矩形树图则相对简单,只经过了对标签的简单布局以及LabelManager.ts中对仍重叠的标签的隐藏处理,即饼图防重中的步骤7。
全国一二线城市中你最不喜欢哪个城市?
图标动效
静态图标主要用于传达信息、动效则赋予了它更多的功能。例如:引导用户进行下一步操作、将用户的目光聚焦到重要的信息上、使用户的操作得到更好的反馈、提升产品的品牌形象。
SVG Path 补间动画
SVG
元素Path
标签的d
属性同样可以使用transition
来实现平滑过度、本文简单介绍如何使用transition
来平滑过度path
标签的路径,有那些限制,以及如何解决。
ECharts源码解析之图层(CanvasLayer)
ECharts之性能优化
背景
ECharts
在大规模数据渲染下性能表现优秀,基于现有的知识体系我们猜测可能应用了:
- 数据抽取策略,在已确认的小画布大数据,数据无法完全展示的场景下对数据做采样仅展示关键帧数据。
- 离屏渲染一种比较常见的针对复杂场景、重复元素的
canvas
性能优化解决方案。 - 多层画布对于背景元素、数据元素、交互提示类元素做分层处理对于样式稳定的元素单独绘制,不再重绘。
ECharts
应用了哪些性能优化方案?如何去实现的?我们根据宿爽 - 16毫秒的挑战_图表库渲染优化尝试从ECharts的源码中来一探究竟。