ECharts(Enterprise Charts)是百度开源、后捐赠给 Apache 软件基金会的 JavaScript 数据可视化图表库,2021 年毕业成为 Apache 顶级项目。它把坐标轴、图例、提示框、动画等图表底层细节封装成声明式配置:开发者只需提供一份 option 对象描述数据与样式,即可在 Web 页面生成折线图、柱状图、饼图、地图、桑基图、关系图等 20 余种图表,并自带缩放、刷选、联动等交互能力。ECharts 默认使用 Canvas 渲染、可切换 SVG,内置针对十万级大数据的降采样与渐进渲染策略,是 Web 报表、数据大屏和 AI 应用前端可视化的事实标准之一。本文按「速览—安装—上手—能力—生产」的顺序展开,先 5 分钟跑通最小示例,再逐层拆解核心能力与部署要点,最后给出选型对比、常见误区与面试题,帮助读者直接落地到真实项目。

岗位关联

对 AI 从业者:模型评估曲线、RAG 检索指标、Agent 日志统计都可以用 ECharts 在十几行配置内变成可交互图表,是 AI 应用前端与数据产品岗位的标配技能。

目录
  1. 为什么需要 ECharts:把数据可视化从手写变成声明式配置
  2. 安装与环境配置:3 步就绪
  3. 快速上手:5 分钟跑通第一个图表
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
JavaScript 数据可视化图表库(开源)
开发商
百度(现归 Apache 软件基金会)
开源协议
Apache License 2.0(可商用)
GitHub Stars
无
主要语言
JavaScript / TypeScript
当前版本
5.5.1(2024-10 稳定版)
安装方式
npm install echarts / CDN 引入
上手难度
★★☆☆☆(较低)
适合人群
前端工程师、数据分析师、大屏开发者
同类工具
Chart.js、D3.js、AntV G2
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 ECharts:把数据可视化从手写变成声明式配置

数据分析流程中,出图往往是最后一公里。传统做法是手写 SVG/Canvas 绘制图表,需要自行处理坐标轴刻度、网格、图例、提示框、动画等大量底层细节;用 Excel 或静态图片则无法嵌入网页、无法交互、无法随数据实时更新。D3.js 虽然灵活,但其底层原语式的编程方式要求开发者自己实现缩放、提示框、坐标刻度等机制,项目周期和学习成本都偏高。

ECharts 将上述细节全部封装成声明式配置(声明式配置:用一份描述「要什么」的数据对象告诉库,而不是用代码逐条命令「怎么做」)。开发者只需给出包含 series(数据系列)、xAxis/yAxis(坐标轴)等字段的 option 对象,渲染、动画、交互由库自动完成。库内置 20 余种图表类型和 tooltip(悬停提示)、legend(图例)、dataZoom(数据缩放)、brush(框选刷取)、visualMap(按值映射颜色)等交互组件,多数场景不需要手写一行渲染逻辑。

与 D3.js「低层原语、完全自绘」的气质不同,ECharts 是「高封装、开箱即用」;与 Chart.js 相比,ECharts 图表类型更全、大数据渲染更稳、中文文档与国内社区更完善,适合作为团队的统一可视化底座。

安装与环境配置:3 步就绪

步骤一·安装。工程化项目推荐 npm 安装;无构建工具的页面推荐 CDN 引入完整包。

步骤二·准备容器。在 HTML 中放置一个 div 作为图表容器,并显式设置宽高。

步骤三·验证。命令行打印安装版本号;浏览器打开页面能看到折线图即安装成功。

bash6 行
# 工程化项目推荐 npm 安装npm init -ynpm install echarts # 验证安装版本node -e "const echarts = require('echarts'); console.log('ECharts', echarts.version)"

快速上手:5 分钟跑通第一个图表

最小可用流程是「引入库 → 准备容器 → 初始化实例 → 写 option → setOption 渲染」五步。ECharts 是完全由代码驱动的库,所以完整的可运行示例如下:

1. 引入 ECharts(npm import 或 CDN script)

2. 放置一个显式设置宽高的 div 容器

3. 调用 echarts.init(dom) 获得图表实例

4. 编写至少包含 xAxis、yAxis、series 三部分的 option 对象

5. 调用 chart.setOption(option) 渲染图表

6. 需要自适应时,在 window resize 事件中调用 chart.resize()

打开页面即可看到带悬停提示的折线图,鼠标移到数据点上会显示数值。进阶技巧:数据变化时再次 setOption 即可增量更新,5.0 起的 Universal Transition 会自动为数据变化补充过渡动画,无需手动处理重绘。

html20 行
<!DOCTYPE html><html lang="zh-CN"><head>  <meta charset="utf-8">  <title>ECharts 快速上手</title>  <script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script></head><body>  <!-- 容器必须显式设置宽高 -->  <div id="chart" style="width: 600px; height: 400px;"></div>  <script>    const chart = echarts.init(document.getElementById('chart'));    chart.setOption({      xAxis: { type: 'category', data: ['周一', '周二', '周三'] },      yAxis: { type: 'value' },      series: [{ type: 'line', data: [120, 200, 150] }]    });  </script></body></html>

核心能力详解:5 大支柱

支柱一·20 余种图表类型。覆盖折线、柱状、饼图、散点等基础类,雷达、漏斗、仪表盘等专项类,以及桑基图、旭日图、树图、矩形树图、关系图、地图、箱线图、热力图、平行坐标、K 线图等高阶类;对以上均无法覆盖的需求,可走 custom series 自定义渲染用回调绘制任意图形。

支柱二·声明式 option 与数据驱动更新。option 是唯一配置入口,结构为 JSON 兼容对象,可由后端直接下发、前端零逻辑渲染。setOption 支持增量合并(只传变化的字段),数据更新自动带过渡动画;配 getOption 读取当前配置、clear 清空内容、dispose 销毁实例。

支柱三·交互组件矩阵。tooltip 富文本提示、legend 图例开关、dataZoom 缩放与平移、brush 框选、visualMap 按数据值映射颜色或尺寸、aria 模块提供无障碍描述。chart.on() 事件绑定支持点击、悬停、拖拽回调,可跨图表做联动。

支柱四·双渲染引擎与大数据性能。默认 Canvas 渲染器适合高频更新与大数据量;SVG 渲染器适合数据量小、要求文字清晰与无障碍的场景,init 时通过 renderer 参数切换。大数据优化组合:dataZoom 只渲染可视窗口、sampling 降采样抽取代表点、progressive 分片渐进渲染、appendData 流式追加,十万级数据点仍可保持交互流畅。

支柱五·扩展生态与主题体系。echarts-gl 提供 3D 地球、3D 柱图等 WebGL 能力;echarts-wordcloud 提供词云;bmap 对接百度地图。主题系统支持内置 light/dark 与 registerTheme 自定义主题,官方提供在线主题编辑器;社区封装了 vue-echarts(Vue 2/3)与 echarts-for-react(React)等组件库。

生产部署与监控:从上线到运维

部署方式一·按需引入减小产物体积。完整包的 dist/echarts.min.js 体积在数百 KB 到 1MB 级别,生产环境应使用官方推荐的按需引入方式,配合打包工具的 tree-shaking 只保留用到的模块:

部署方式二·CDN 与缓存策略。无构建场景(静态大屏、内嵌页面)直接用 CDN 完整版,固定版本号并配置长缓存,升级时手动更新版本号即可回滚。多页面共用时建议抽成公共资源,避免每个页面重复下载。

部署方式三·SSR 服务端渲染。ECharts 5.3 起支持在 Node 端将图表渲染为 SVG 字符串再注入 HTML,利于 SEO 与首屏加载;注意 SSR 模式下无交互事件,交互能力需浏览器端基于同一 option 二次初始化。

可观测性。内存方面:SPA 路由切换时必须 dispose() 释放实例,可用浏览器 Memory 面板对比切换前后实例数。自适应方面:window resize 事件防抖后调用 chart.resize()。性能方面:大数据场景开启 sampling/progressive 后用 Performance 面板观察脚本耗时;高频更新用 appendData 增量追加而非全量 setOption。错误处理方面:后端下发的 option 需做字段校验;地图 GeoJSON、字体等异步资源加载失败要有兜底提示。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>容器必须显式设置宽高,否则图表画布尺寸为 0,页面只有空白;ECharts 不会自动撑开容器,也不会按父元素自适应。</li><li>更新数据要用 setOption 增量合并,不要重复调用 echarts.init;重复 init 会残留多个 canvas 实例,导致内存泄漏、事件重复绑定和页面卡顿。</li><li>数据量上万后要主动开启 dataZoom 或 sampling 降采样,默认全量渲染会在交互时明显掉帧;高频流式更新用 appendData 代替全量 setOption。</li><li>SPA 中切换路由或销毁组件时必须调用 dispose() 释放实例,否则 canvas 与事件监听常驻内存,长时间运行后页面越来越卡。</li><li>生产构建务必用 echarts/core 按需引入并配合 tree-shaking,直接全量引入会把完整包打进产物,显著增大首屏体积。</li></ul>

js6 行
import * as echarts from 'echarts/core';import { BarChart, LineChart } from 'echarts/charts';import { TitleComponent, TooltipComponent, GridComponent } from 'echarts/components';import { CanvasRenderer } from 'echarts/renderers'; echarts.use([BarChart, LineChart, TitleComponent, TooltipComponent, GridComponent, CanvasRenderer]);
js6 行
const echarts = require('echarts');const chart = echarts.init(null, null, {  renderer: 'svg', ssr: true, width: 600, height: 400});chart.setOption(option);const svg = chart.renderToSVGString(); // 返回可直接输出的 SVG 字符串
维度Apache EChartsChart.jsD3.jsAntV G2
定位高封装、开箱即用的 Web 图表库轻量级 Canvas 图表库底层可视化工具库(数据驱动 DOM/SVG)蚂蚁集团数据可视化解决方案
编排范式option 声明式配置基于配置对象声明数据绑定 + 底层 API 编程图表语法 + 配置 + 组件
类型约束20+ 内置类型 + custom series8 种基础图表无内置图表,完全自绘图表类型丰富,G2 高度可定制
学习曲线低(一份 JSON 即可出图)低陡峭(需掌握 SVG 与数据绑定)中
生态集成vue-echarts、echarts-for-react、echarts-gl社区插件较多但深度有限生态自由、需自行封装蚂蚁系产品贯通,企业级组件库
生产部署tree-shaking 按需引入 + SSR轻量 CDN 即用需自行封装工程化方案配合 Ant Design 技术栈
LicenseApache 2.0MITISCMIT
适合谁通用 Web 图表、数据大屏、报表快速做几张简单图表定制化可视化、数据新闻蚂蚁技术栈、企业级中后台

选型建议:大多数 Web 报表、数据大屏与 AI 应用前端场景直接选 ECharts,配置成本最低、图表类型最全;若只画两三种基础图且在意体积,Chart.js 更轻;需要从零定制可视化效果(如数据新闻图)选 D3.js;在蚂蚁系技术栈且需要组件化集成时优先 AntV。

版本迭代

ECharts 2013 年由百度发布 1.0,2015 年 2.0 完善图例与坐标系体系,2017 年 3.0 重写底层、引入双渲染引擎,2018 年 4.0 捐赠 Apache 并强化无障碍,2020-12 的 5.0 完成模块化重构并引入动态叙事,此后保持每年 1-2 个次版本迭代,5.5.x 为当前稳定线。

版本时间变化提升
3.02017-01底层架构重写,Canvas/SVG 双渲染引擎包体积缩小、首屏渲染更快,新增桑基图、旭日图等类型
4.02018-04捐赠 Apache、大数据与无障碍优化引入 aria 无障碍模块,tooltip 支持富文本定制
5.02020-12模块化重构、动态叙事新增 Universal Transition 通用过渡动画,label 布局优化,支持按需引入
5.32022-08服务端渲染能力新增 SSR 渲染模式,可在 Node 端输出 SVG 字符串
5.42023-06体验与性能打磨优化 tooltip、坐标轴等组件细节,修复大量 issue
5.5.12024-105.5 系列维护版本修复已知 issue,增强格式化工具与交互细节
结论

ECharts 官方未发布统一的性能评测榜单,版本间差异以官方 changelog 和业务实测为准,因此上表不列评测分数。5.x 系列的三个核心收益是:按需引入(echarts/core)显著减小打包体积、SSR 服务端渲染能力、Universal Transition 带来的数据更新平滑体验;升级 5.x 时 option 大体向后兼容,主要注意 label、tooltip 等组件默认行为的变化。

AI 应用场景

数据大屏与实时监控中心

阶段:可视化呈现

解决的问题:大屏监控指标多、刷新频繁,静态图表无法支撑。ECharts 支持 setOption 增量更新与 appendData 流式追加,数据到达即局部刷新,不重建整个图表。

具体案例:电商大促大屏典型配置为 20-30 个图表实例同屏、前端每 3-5 秒轮询一次接口并 setOption 更新;配合 dataZoom 查看时间窗口、chart.on 事件做图表联动,页面保持流畅交互、无整图闪烁。

业务报表与 BI 嵌入

阶段:数据报告

解决的问题:报表开发原先需要手绘或导出图片,改动即返工。声明式 option 让「改数据即改图」,报表页面可配置化开发并嵌入管理系统。

具体案例:数据分析平台将历史 60+ 张静态报表切换为 ECharts 动态图表,单张报表从需求到上线约半个工作日,支持拖选时间区间、悬停查看明细、一键导出图片,满足运营自助取数。

模型训练与评估报告

阶段:模型评估可视化

解决的问题:训练曲线、混淆矩阵、特征分布需要标准化输出,人工截图整理效率低。ECharts 提供 line、scatter、heatmap、boxplot 等对应图表,封装一次全部复用。

具体案例:算法团队将训练日志接入统一图表组件,每次实验自动生成含 loss/acc 曲线、混淆矩阵热力图、特征箱线图的报告页,出图环节从小时级压缩到分钟级,模型评估对比一目了然。

常见误区

误区我每次数据变了就重新调 `echarts.init` 再 `setOption`,图表也能更新,应该没问题吧?

正解init 每次都会创建新的实例和 canvas 节点。正确做法是 init 一次拿到实例,之后全部用 setOption 更新;重复 init 会残留未销毁实例,导致内存泄漏、事件重复绑定、页面卡顿。组件卸载时再调 dispose()。

为何常见:教程示例常把 init 与 setOption 写在一起,初学者容易把 init 误当成「刷新入口」,忽略了实例生命周期。

误区ECharts 就是拿数据画一张静态图,交互和动画都要自己写 JS 吗?

正解库内置 tooltip、legend、dataZoom、brush、visualMap 等交互组件,数据更新时 setOption 自动带过渡动画,5.0 起 Universal Transition 负责数据变化时的平滑补间;chart.on 事件绑定可实现多图联动。

为何常见:只看渲染结果教程,没有接触交互配置项,误以为交互需要额外开发。

误区10 万条数据的折线图 ECharts 根本带不动,只能换方案。

正解大数据优化是 ECharts 的核心能力:dataZoom 窗口只渲染可视区、sampling 降采样(用 LTTB 算法从海量点中抽取代表点)、progressive 分片渐进渲染、appendData 流式追加,组合使用可保持交互流畅。卡顿通常是没开启这些选项。

为何常见:默认配置对大数据的处理偏保守,优化开关需要开发者主动开启,教程中较少强调。

误区我在 body 里放了个 div 没写 CSS,init 后为什么一片空白?

正解图表以 canvas/svg 输出,必须从容器读取宽高,容器无显式尺寸时画布为 0、页面空白。图表不会自动撑开容器,窗口变化还需手动调 chart.resize();在 display:none 容器中 init 同样无法正确渲染。

为何常见:对「图表画布依赖容器尺寸」的机制不了解,把图表当普通 HTML 元素对待。

误区echarts 包体积太大,项目一引入就多出 1MB,只能换轻量库。

正解echarts/core + echarts/charts + echarts/components + echarts/renderers 配合 use 注册,借助打包工具的 tree-shaking 只打包用到的图表和组件;无构建场景则直接用 CDN 完整版。按需引入后体积通常可降到全量包的几分之一。

为何常见:官方示例多用全量 CDN 引入,按需引入的文档入口较深,容易漏掉。

面试题

Q1. 在浏览器中初始化 ECharts 图表实例应调用哪个 API?

单选题 · easy

  • A.echarts.init()← 正确答案
  • B.echarts.create()
  • C.echarts.render()
  • D.echarts.build()

答案:A。echarts.init(dom) 接受 DOM 容器并返回图表实例,是唯一的初始化入口;create/render/build 均不是 ECharts 的 API。注意 init 每次调用都会新建实例,更新数据时应复用实例而不是重复 init。

Q2. 图表已渲染后,更新数据并刷新显示应使用哪个方法?

单选题 · easy

  • A.重新调用 echarts.init()
  • B.调用 chart.setOption()← 正确答案
  • C.调用 chart.refresh()
  • D.刷新整个页面

答案:B。setOption 负责增量合并配置并重绘,是更新图表的标准方式;重复 init 会遗留旧实例导致内存泄漏,ECharts 没有 refresh 方法,刷新页面是最差的方案。

Q3. ECharts 通过哪个对象描述图表的全部配置?

单选题 · easy

  • A.options 数组
  • B.option 对象← 正确答案
  • C.config 对象
  • D.settings 对象

答案:B。option 是 ECharts 唯一的配置入口,包含 series、xAxis、yAxis、tooltip、legend 等全部字段,结构为 JSON 兼容对象;其余三个名称均不是 ECharts 的配置术语。

Q4. 图表容器未显式设置宽高时,渲染结果通常是?

单选题 · mid

  • A.图表自动填满容器
  • B.图表按父元素比例缩放
  • C.页面空白无图表← 正确答案
  • D.默认 100x100 像素

答案:C。ECharts 的渲染画布从容器读取宽高,容器没有显式尺寸时宽高为 0,表现为空白。图表不会自动撑开容器,也不会按父元素自动缩放;正确做法是给容器设置固定宽高或父级有明确高度的百分比宽高。

Q5. 实现数据区域缩放(滚轮放大查看区间)应配置哪个组件?

单选题 · mid

  • A.tooltip
  • B.legend
  • C.dataZoom← 正确答案
  • D.visualMap

答案:C。dataZoom 提供框选与滚轮缩放,控制坐标轴的数据显示范围,常用于大数据定位;tooltip 是悬停提示,legend 控制图例显隐,visualMap 将数据值映射为颜色或尺寸,三者都不具备区间缩放能力。

Q6. 浏览器窗口尺寸变化后,让图表自适应容器应调用?

单选题 · mid

  • A.chart.resize()← 正确答案
  • B.chart.refresh()
  • C.chart.update()
  • D.echarts.resize()

答案:A。窗口变化后图表画布不会自动跟随容器,必须手动调用实例的 resize() 重新测量并重绘,常见做法是在 window resize 事件中防抖调用;echarts.resize 不是 API,refresh 与 update 也不是图表实例的方法。

Q7. 下列哪个是 ECharts 官方维护的 3D 可视化扩展库?

单选题 · mid

  • A.echarts-gl← 正确答案
  • B.echarts-3d
  • C.echarts-webgl
  • D.echarts-viewer

答案:A。echarts-gl 是官方扩展库,提供 3D 柱图、3D 地球、3D 散点等 WebGL 图表,通过扩展系列类型使用;其余选项均不存在于官方生态。

Q8. 哪些做法能明显提升 ECharts 大数据量渲染的流畅度?

多选题 · mid

  • A.开启 sampling 降采样策略← 正确答案
  • B.使用 progressive 渐进渲染← 正确答案
  • C.每次更新都重新构建实例
  • D.配合 dataZoom 控制可视范围← 正确答案

答案:ABD。sampling 用 LTTB 算法从海量点中抽取代表点,progressive 将渲染切分为多帧渐进完成,dataZoom 让图表只渲染可视区间数据——三者组合可支撑十万级数据点;重复构建实例只会加剧卡顿,因为残留实例仍在占用资源。

Q9. 关于 ECharts 按需引入,下列说法正确的是?

多选题 · hard

  • A.可从 echarts/core 引入核心模块← 正确答案
  • B.图表与组件需通过 use 注册← 正确答案
  • C.渲染器决定最终打包的渲染引擎← 正确答案
  • D.按需引入会失去所有动画能力

答案:ABC。按需引入的标准姿势是从 echarts/core 引入核心、echarts/charts 引入图表、echarts/components 引入组件、echarts/renderers 引入渲染器,最后统一 use 注册,注册什么才打包什么;Canvas 与 SVG 渲染器二选一注册。按需引入不会丢失动画或交互能力,D 错误。

Q10. 下列关于 ECharts 版本与协议的说法正确的有?

多选题 · hard

  • A.ECharts 由百度团队发起并开源← 正确答案
  • B.项目现已捐赠给 Apache 基金会← 正确答案
  • C.开源协议为 Apache License 2.0← 正确答案
  • D.ECharts 5 仅支持 Canvas 渲染

答案:ABC。ECharts 由百度团队于 2013 年开源,2018 年捐赠给 Apache 软件基金会并成为顶级项目,协议为 Apache License 2.0 可自由商用;5.0 支持 Canvas 与 SVG 双渲染器,5.3 起还支持 SSR 服务端渲染,因此 D 错误。

参考来源