ECharts 核心是 Apache ECharts 库的基础。它提供了驱动可视化库中所有图表类型和组件的基本架构、生命周期管理和渲染机制。本页面将介绍核心系统架构、初始化过程以及实现 ECharts 强大可视化能力的关键机制。
有关驱动 ECharts 选项的类型系统信息,请参阅类型系统。有关数据管理和处理的详细信息,请参阅数据管理。
ECharts 核心主要通过 ECharts 类实现,该类是图表实例的中心控制点。该类封装了整个图表生命周期,从初始化和选项处理到渲染和事件处理。
核心系统负责:
来源: src/core/echarts.ts332-497 package.json1-225
来源: src/core/echarts.ts332-497 src/core/echarts.ts578-721
ECharts:主类,作为图表创建和配置的入口。它管理图表的生命周期,处理用户交互,并协调不同组件。
ZRender:底层渲染引擎,负责在 Canvas 或 SVG 上实际绘制图形。它是 ECharts 所依赖的一个独立库。
GlobalModel:包含图表的所有配置数据和状态,包括系列、组件和选项。
Scheduler:协调数据处理和可视化任务。它管理数据处理、视觉编码和布局计算的管道。
ExtensionAPI:提供组件扩展与核心系统交互的接口。
MessageCenter:处理组件之间的事件通信。
CoordinateSystemManager:管理图表中使用的不同坐标系,例如笛卡尔坐标系、极坐标系等。
来源: src/core/echarts.ts332-497 src/core/echarts.ts139-192
来源: src/core/echarts.ts395-496 src/core/echarts.ts610-691
ECharts 实例的初始化涉及几个关键步骤:
创建 ECharts 实例:这通过 echarts.init(dom, theme, opts) 工厂方法完成,该方法创建一个新的 ECharts 实例。
ZRender 初始化:ECharts 实例使用提供的 DOM 元素初始化一个 ZRender 实例。
组件初始化:初始化各种管理器和组件,包括:
事件绑定:为鼠标交互和动画帧设置事件监听器。
ECharts 实例的典型生命周期包括:
init() → setOption() → (render cycle) → resize()/dispatchAction() → (render cycle) → dispose()
来源: src/core/echarts.ts395-496 src/core/echarts.ts498-577
来源: src/core/echarts.ts610-691 src/core/echarts.ts139-192
ECharts 的核心功能之一是处理配置选项。这发生在 ECharts 类的 setOption 方法中:
选项合并:当调用 setOption 时,ECharts 可以替换现有选项(使用 notMerge: true)或与现有选项合并(默认行为)。
选项管理:OptionManager 帮助管理主题和选项,包括将选项与主题合并。
模型创建:选项用于创建或更新 GlobalModel,然后 GlobalModel 创建组件模型和系列模型。
选项处理管道包括向后兼容性处理、主题应用和组件特定选项处理。
来源: src/core/echarts.ts610-691
ECharts 中的渲染管道由 Scheduler 管理,包含多个阶段:
数据处理:原始数据被处理成可用于可视化的格式。
PRIORITY_PROCESSOR_*)视觉编码:数据被映射到颜色、大小和位置等视觉属性。
PRIORITY_VISUAL_*)布局计算:计算元素的位置和大小。
渲染:视觉元素被渲染到屏幕上。
这些阶段中的每一个都作为一系列任务实现,由 Scheduler 按照优先级顺序执行。
来源: src/core/echarts.ts498-577 src/core/echarts.ts139-192
来源: src/core/echarts.ts843-888 src/core/echarts.ts1000-1049
ECharts 拥有一个全面的事件系统,可处理用户交互和内部事件:
事件注册:用户可以使用 on 方法注册事件处理程序。
事件类型:
事件传播:事件源自 ZRender 并传播到 ECharts 实例,然后 ECharts 实例处理这些事件并触发相应的处理程序。
动作分发:可以使用 dispatchAction 方法以编程方式分发动作。
来源: src/core/echarts.ts843-888 src/core/echarts.ts889-999
ECharts 管理视觉元素的不同状态,这对于用户交互非常重要:
普通状态:元素的默认外观。
强调状态:当鼠标悬停在元素上时激活,通常用于高亮显示。
选中状态:应用于被选中的元素,通常通过点击实现。
虚化状态:当其他元素高亮显示时,应用于未聚焦的元素。
状态管理系统通过 states.ts 文件中的一系列辅助函数实现,并在整个 ECharts 渲染管道中使用。
来源: src/core/echarts.ts1050-1100 src/util/states.js56-83
来源: src/core/echarts.ts395-420 package.json67-68
ZRender 是 ECharts 使用的渲染引擎。它是一个轻量级的 Canvas 库,提供:
ECharts 使用 ZRender 作为其底层渲染引擎,创建了一个抽象层,使其能够专注于图表逻辑而非底层渲染细节。
来源: src/core/echarts.ts395-420 package.json67-68
ECharts 和 ZRender 之间的主要集成点包括:
初始化:ECharts 在初始化期间创建 ZRender 实例
元素创建:图表组件和系列创建 ZRender 元素(路径、图像、文本)以表示其视觉形式。
事件处理:ZRender 处理 DOM 事件并将其传递给 ECharts 进行进一步处理。
动画:ECharts 使用 ZRender 的动画系统创建平滑过渡。
渲染:ECharts 在需要时触发 ZRender 渲染元素。
来源: src/core/echarts.ts419-459 src/core/echarts.ts769-772
| 方法 | 描述 |
|---|---|
echarts.init(dom, theme, opts) | 创建一个新的 ECharts 实例 |
chart.setOption(option, notMerge, lazyUpdate) | 设置或更新图表配置 |
chart.getWidth() / chart.getHeight() | 获取图表容器的宽度/高度 |
chart.resize(opts) | 调整图表大小 |
chart.dispatchAction(payload) | 分派一个动作来触发状态改变 |
chart.on(eventName, handler, context) | 注册一个事件处理程序 |
chart.off(eventName, handler) | 移除一个事件处理程序 |
chart.getDataURL(opts) | 获取图表图片的 base64 URL |
chart.getConnectedDataURL(opts) | 获取关联图表的 base64 URL |
chart.appendData(params) | 向系列追加数据 |
chart.clear() | 清除图表内容 |
chart.isDisposed() | 检查图表是否已销毁 |
chart.dispose() | 销毁图表 |
来源: src/core/echarts.ts578-842
最常用的 API 方法包括:
echarts.init(dom, theme, opts):创建一个新的 ECharts 实例
dom:用于渲染图表的 DOM 元素theme:主题名称或配置对象opts:初始化选项,包括渲染器类型chart.setOption(option, notMerge, lazyUpdate):设置或更新图表配置
option:图表配置对象notMerge:是否与现有选项合并lazyUpdate:是否延迟更新chart.resize(opts):调整图表大小
opts:调整大小选项,包括宽度和高度chart.dispatchAction(payload):以编程方式触发动作
payload:带有类型和参数的动作配置chart.on(eventName, handler, context):注册事件处理程序
eventName:事件名称handler:事件处理函数context:处理程序的上下文来源: src/core/echarts.ts579-608 src/core/echarts.ts609-691
来源: src/core/echarts.ts1950-2000 package.json105-223
ECharts 通过其选项结构具有高度可配置性。主要的配置部分包括:
全局选项:控制图表的整体外观和行为
title、legend、tooltip、grid 等。系列选项:定义数据系列及其可视化
series: [{type: 'line', data: [...]}, ...]组件选项:配置图表组件
xAxis、yAxis、dataZoom、visualMap 等。视觉映射:定义数据和视觉属性之间的映射
visualMap、系列级别视觉属性等。来源: src/core/echarts.ts580-608 src/core/echarts.ts609-691
ECharts 提供多种扩展机制:
注册组件:可以注册新的图表类型或组件
主题:可以注册和应用自定义主题
地图数据:可以注册自定义 GeoJSON 数据
本地化:可以注册自定义本地化文本
ECharts 采用模块化架构,功能可以根据需要包含或排除。包导出反映了这种模块化,允许用户仅导入他们需要的部分。
来源: src/core/echarts.ts1950-2000 package.json105-223
ECharts 包含多种性能优化机制:
渐进式渲染:大型数据集可以渐进式渲染,以避免界面冻结
progressive 选项控制增量渲染:仅重新渲染更改的部分
流模式:对于时间序列数据,允许高效追加数据
appendData 方法实现Canvas 与 SVG:支持两种具有不同性能特征的渲染模式
分层渲染:使用多层方法进行渲染
节流:对调整大小等频繁操作进行节流
来源: src/core/echarts.ts498-577 src/core/echarts.ts1101-1200
ECharts 核心为整个 ECharts 库提供了基础。它管理图表生命周期、处理选项、协调渲染并处理事件。通过理解核心架构和组件,您可以更好地利用 ECharts 的能力并根据自定义需求进行扩展。
ECharts 核心要点
有关基于核心构建的图表类型和组件的更多详细信息,请参阅相应的文档页面。