Apache ECharts
基于 JavaScript 的开源可视化图表库,提供 20+ 种图表类型、丰富的交互能力和强大的渲染性能,是国内数据可视化领域的首选方案。
Apache ECharts 是百度开源并捐赠给 Apache 基金会的数据可视化图表库,内置 20+ 种图表类型,支持 Canvas/SVG 双引擎渲染,通过配置项驱动图表生成,GitHub 星标超 66.8k,在国内拥有庞大用户群体。
Apache ECharts
基于 JavaScript 的开源可视化图表库,提供 20+ 种图表类型、丰富的交互能力和强大的渲染性能,是国内数据可视化领域的首选方案。
技术简介说明
Apache ECharts 是由百度于 2013 年开源的数据可视化图表库,2018 年捐赠给 Apache 软件基金会,成为 Apache 顶级项目。ECharts 的名字来源于 "Expressive Rich Charts",意为"富有表现力的丰富图表"。经过十余年的发展,ECharts 已成为全球最受欢迎的开源可视化库之一,GitHub 星标超过 66.8k,npm 周下载量超过 900 万。
ECharts 的核心价值在于:它提供了一套完整的、开箱即用的图表解决方案。内置 20+ 种图表类型(折线图、柱状图、散点图、饼图、K 线图、地图、3D 图等),支持丰富的交互能力(数据缩放、图例开关、数据筛选、联动等),并提供 Canvas 和 SVG 双引擎渲染。ECharts 的 API 设计简洁直观,通过配置项(option)驱动图表生成,大幅降低了数据可视化的开发门槛。
截至 2025-2026 年,ECharts 已发布 v6.1.0 版本(2026 年 5 月发布),完成了 TypeScript 全面重写、主题系统升级、新增多种图表类型等重要特性。ECharts 在国内拥有庞大的用户群体,广泛应用于电商、金融、政务、数据分析等各类场景,是 Vue、React、Angular 等主流框架生态中集成度最高的图表库之一。
基本信息
| 项目 | 信息 |
|---|---|
| 官网 | https://echarts.apache.org |
| GitHub | https://github.com/apache/echarts |
| npm | https://www.npmjs.com/package/echarts |
| 最新版本 | v6.1.0(2026-05-18 发布) |
| License | Apache-2.0 |
| GitHub Stars | ~66.8k |
| 周下载量 | ~900 万 |
| Bundle Size | ~300KB(gzip) |
| TypeScript | 原生支持(v5 开始全面 TS 重写) |
| 主要维护者 | Apache 软件基金会、百度(早期)、社区贡献者 |
快速上手
安装
# npm
npm install echarts
# yarn
yarn add echarts
# pnpm
pnpm add echarts
# CDN
<script src="https://cdn.jsdelivr.net/npm/echarts@6/dist/echarts.min.js"></script>基础配置
在项目中引入 ECharts 并初始化图表:
import * as echarts from 'echarts'
// 初始化图表实例
const chartDom = document.getElementById('main')!
const myChart = echarts.init(chartDom)
// 配置项
const option = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data: ['销量']
},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}
]
}
// 使用配置项渲染图表
myChart.setOption(option)最小示例
Vue 3 集成示例:
<template>
<div ref="chartRef" style="width: 600px; height: 400px"></div>
</template>
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import * as echarts from 'echarts'
const chartRef = ref<HTMLElement>()
let chartInstance: echarts.ECharts | null = null
onMounted(() => {
chartInstance = echarts.init(chartRef.value!)
chartInstance.setOption({
xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },
yAxis: { type: 'value' },
series: [{ data: [150, 230, 224, 218, 135, 147, 260], type: 'line' }]
})
})
onUnmounted(() => {
chartInstance?.dispose()
})
</script>React 集成示例:
import { useEffect, useRef } from 'react'
import * as echarts from 'echarts'
export default function EChartsDemo() {
const chartRef = useRef<HTMLDivElement>(null)
let chartInstance: echarts.ECharts | null = null
useEffect(() => {
chartInstance = echarts.init(chartRef.current!)
chartInstance.setOption({
xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },
yAxis: { type: 'value' },
series: [{ data: [150, 230, 224, 218, 135, 147, 260], type: 'line' }]
})
return () => {
chartInstance?.dispose()
}
}, [])
return <div ref={chartRef} style={{ width: 600, height: 400 }} />
}或使用官方封装组件:
npm install vue-echarts # Vue
npm install echarts-for-react # React核心概念与架构
ECharts 的架构围绕以下几个核心概念展开:
1. 配置项(Option)
Option 是 ECharts 的核心,通过一个 JSON 对象描述图表的所有视觉和交互特性。Option 包含:
title:标题组件legend:图例组件tooltip:提示框组件xAxis/yAxis:直角坐标系series:数据系列(图表类型)dataset:数据集geo:地理坐标系radar:雷达坐标系
2. 系列(Series)
Series 定义图表的类型和数据,ECharts 支持 20+ 种系列类型:
line:折线图bar:柱状图pie:饼图scatter:散点图map:地图candlestick:K 线图boxplot:箱型图heatmap:热力图parallel:平行坐标graph:关系图sankey:桑基图funnel:漏斗图gauge:仪表盘tree:树图treemap:矩形树图sunburst:旭日图custom:自定义系列
3. 坐标系(Coordinate System)
ECharts 支持多种坐标系:
- 直角坐标系(Cartesian2D)
- 极坐标系(Polar)
- 地理坐标系(Geo)
- 雷达坐标系(Radar)
- 单轴坐标系(SingleAxis)
- 日历坐标系(Calendar)
4. 组件(Component)
ECharts 采用组件化设计,所有视觉元素都是可插拔的组件:
- 标题(title)
- 图例(legend)
- 提示框(tooltip)
- 工具栏(toolbox)
- 数据缩放(dataZoom)
- 视觉映射(visualMap)
- 标记线/点/区域(markLine/markPoint/markArea)
5. 渲染引擎
ECharts 底层依赖 ZRender 轻量级 Canvas/SVG 渲染库,提供:
- Canvas 渲染(默认,性能优先)
- SVG 渲染(矢量,适合高清屏和打印)
- 双引擎动态切换
架构流程
数据 → 配置项(Option)→ ECharts 核心 → ZRender 渲染引擎 → Canvas/SVG
↑
组件系统(标题、图例、提示框等)
核心特性
-
📊 丰富的图表类型:内置 20+ 种图表类型,覆盖折线、柱状、饼图、散点、地图、K 线、关系图、桑基图、旭日图、矩形树图等主流可视化需求。
-
⚡ 高性能渲染:基于 ZRender 渲染引擎,支持 Canvas 和 SVG 双引擎,可渲染百万级数据点。v6 版本进一步优化了大数据量下的渲染性能。
-
🎨 精美的可视化设计:提供多套内置主题(默认主题、暗色主题等),支持自定义主题。v6 引入全新默认主题,配色和视觉设计更加现代化。
-
🖱️ 丰富的交互能力:内置数据缩放(dataZoom)、图例开关、提示框(tooltip)、工具栏(toolbox)、视觉映射(visualMap)等交互组件,支持鼠标、触摸、键盘操作。
-
📱 响应式设计:支持图表自适应容器尺寸,提供
resize()方法。v6 增强了移动端适配和响应式能力。 -
🌍 地图可视化:内置中国地图、世界地图数据(需额外引入),支持 GeoJSON 格式,可绘制省份、城市、自定义区域地图。
-
🎬 动画效果:支持图表初始化、数据更新、状态切换的平滑动画,提供多种动画缓动效果。
-
🔌 插件化扩展:通过扩展包提供额外能力:
echarts-gl:3D 图表、地球可视化、WebGL 加速echarts-wordcloud:词云图echarts-liquidfill:水球图echarts-stat:数据统计工具
-
🌐 多框架集成:官方和社区提供 Vue、React、Angular、Svelte 等框架的封装组件,开箱即用。
-
📦 按需引入:支持 Tree-shaking,可以只引入需要的图表类型和组件,减小打包体积。
生态图
ECharts 的生态在 2025-2026 年已相当完善:
| 生态项目 | 说明 |
|---|---|
| ECharts | 核心库,提供 20+ 种图表类型 |
| ECharts-GL | 3D 图表、地球可视化、WebGL 加速 |
| ECharts-Wordcloud | 词云图扩展 |
| ECharts-Liquidfill | 水球图扩展 |
| vue-echarts | Vue 3 官方封装组件 |
| echarts-for-react | React 官方封装组件 |
| ngx-echarts | Angular 封装组件 |
| ZRender | 底层渲染引擎(Canvas/SVG) |
| ECharts Stat | 数据统计工具(聚类、回归等) |
| ECharts Custom Series | 自定义系列扩展 |
| ECharts MCP Server | AI 集成 MCP 服务器 |
| Awesome ECharts | 社区资源集合 |
适用场景
-
数据大屏与仪表盘:ECharts 是国内数据大屏的首选方案,支持多种图表组合、自适应布局、实时数据更新,广泛应用于电商、金融、政务、物流等领域的可视化大屏。
-
数据分析平台:提供丰富的图表类型和交互能力,适合构建 BI 系统、数据报表、数据探索工具。支持数据缩放、筛选、联动等高级交互。
-
金融与股票系统:内置 K 线图、分时图、技术指标等金融专用图表,支持多时间周期、缩放、十字光标等金融场景特性。
-
地理信息可视化:支持中国地图、世界地图、GeoJSON 自定义地图,适合区域数据展示、热力地图、路径可视化等地理场景。
-
企业级管理后台:与 Ant Design、Element Plus 等 UI 框架深度集成,适合构建中后台系统的数据报表、统计图表。
-
移动端 H5 应用:v6 增强了移动端适配,支持触摸交互、响应式布局,适合移动端数据展示。
-
3D 可视化:通过 ECharts-GL 扩展,支持 3D 柱状图、3D 地图、地球可视化、WebGL 加速的大规模数据渲染。
开发与工程化
按需引入
ECharts 支持 Tree-shaking,可以按需引入图表类型和组件,减小打包体积:
// 按需引入核心和组件
import * as echarts from 'echarts/core'
import { BarChart, LineChart } from 'echarts/charts'
import {
TitleComponent,
TooltipComponent,
LegendComponent,
GridComponent
} from 'echarts/components'
import { CanvasRenderer } from 'echarts/renderers'
// 注册组件
echarts.use([
BarChart,
LineChart,
TitleComponent,
TooltipComponent,
LegendComponent,
GridComponent,
CanvasRenderer
])
// 初始化图表
const chart = echarts.init(document.getElementById('main')!)主题定制
ECharts 支持自定义主题,可以全局注册:
// 注册自定义主题
echarts.registerTheme('myTheme', {
color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de'],
backgroundColor: 'rgba(252,252,252,0)',
textStyle: {},
title: {
textStyle: { fontSize: 16, fontWeight: 'bold' }
}
})
// 使用主题
const chart = echarts.init(document.getElementById('main'), 'myTheme')与 Vue 3 集成(vue-echarts)
<template>
<v-chart :option="chartOption" autoresize />
</template>
<script setup lang="ts">
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { LineChart } from 'echarts/charts'
import { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import VChart from 'vue-echarts'
use([CanvasRenderer, LineChart, TitleComponent, TooltipComponent, LegendComponent])
const chartOption = {
xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] },
yAxis: { type: 'value' },
series: [{ data: [150, 230, 224], type: 'line' }]
}
</script>与 React 集成(echarts-for-react)
import ReactECharts from 'echarts-for-react'
export default function Chart() {
const option = {
xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] },
yAxis: { type: 'value' },
series: [{ data: [150, 230, 224], type: 'line' }]
}
return <ReactECharts option={option} style={{ height: 400 }} />
}服务端渲染(SSR)
ECharts 支持在 Node.js 环境中使用 Canvas 或 SVG 渲染图表:
import * as echarts from 'echarts'
import { createCanvas } from 'canvas'
const canvas = createCanvas(800, 600)
const chart = echarts.init(canvas as any)
chart.setOption({
// ... 配置项
})
// 导出图片
const buffer = canvas.toBuffer('image/png')动态数据更新
ECharts 支持平滑的数据更新动画:
// 定期更新数据
setInterval(() => {
const newData = generateRandomData()
chart.setOption({
series: [{ data: newData }]
})
}, 2000)与 ECharts-GL 集成(3D 图表)
npm install echarts-glimport 'echarts-gl'
const chart = echarts.init(document.getElementById('main')!)
chart.setOption({
xAxis3D: { type: 'category', data: [...] },
yAxis3D: { type: 'category', data: [...] },
zAxis3D: { type: 'category', data: [...] },
series: [{
type: 'bar3D',
data: [...]
}]
})性能与安全
性能特性
- 双引擎渲染:Canvas(默认,性能优先)和 SVG(矢量,适合高清屏)可选
- 大数据量优化:支持百万级数据点渲染,提供
large模式优化大数据集性能 - 增量渲染:支持分帧渲染,避免阻塞主线程
- 按需引入:Tree-shaking 支持,只打包使用的图表类型和组件
- 数据下采样:大数据量时自动下采样,保持视觉效果的同事提升性能
- WebGL 加速:通过 ECharts-GL 扩展,利用 GPU 加速 3D 图表和大规模数据渲染
性能优化建议
-
大数据量场景:
- 启用
large: true和largeThreshold配置 - 使用
appendData增量加载数据 - 考虑使用 ECharts-GL 的 WebGL 渲染
- 启用
-
减少重绘:
- 避免频繁调用
setOption,使用notMerge: false合并配置 - 使用
setOption的replaceMerge参数精确更新
- 避免频繁调用
-
按需引入:
- 只引入需要的图表类型和组件
- 避免引入整个
echarts包
-
响应式优化:
- 使用
ResizeObserver监听容器尺寸变化 - 防抖处理
resize()调用
- 使用
安全考量
- XSS 防护:ECharts 默认不对数据进行 HTML 转义,在
formatter函数中渲染用户输入时需要注意 XSS 防护 - 数据验证:对于外部数据源,建议进行数据格式和范围验证
- 供应链安全:2026 年 5 月 AntV 生态遭遇 npm 供应链攻击(Shai-Hulud 恶意软件),ECharts 的 React 封装包
echarts-for-react也受到影响。建议使用 lockfile 固定版本,启用 npm 审计
技术对比
| 特性 | ECharts | Chart.js | D3.js | AntV G2 | Highcharts |
|---|---|---|---|---|---|
| 包体积 | ~300KB | ~92KB | ~90KB | ~150KB | 商业授权 |
| 图表类型 | 20+ | 8 种 | 无限制(底层库) | 10+ | 40+ |
| TypeScript | ✅ 原生支持 | ✅ 原生支持 | ✅ 类型定义 | ✅ 原生支持 | ✅ 类型定义 |
| 渲染引擎 | Canvas/SVG | Canvas/SVG | SVG/Canvas/HTML | Canvas/SVG/WebGL | SVG |
| 学习曲线 | 低(配置驱动) | 低(配置驱动) | 高(底层 API) | 中(图形语法) | 低(配置驱动) |
| 交互能力 | 丰富 | 基础 | 需自行实现 | 丰富 | 丰富 |
| 大数据量 | ✅ 优秀 | ⚠️ 一般 | ⚠️ 需优化 | ✅ 良好 | ✅ 良好 |
| 3D 支持 | ✅(ECharts-GL) | ❌ | ❌ | ✅(G2 3D) | ❌ |
| 地图支持 | ✅ 内置 | ❌ | ✅ 需自行实现 | ✅(L7) | ✅(付费) |
| 响应式 | ✅ | ✅ | ⚠️ 需自行实现 | ✅ | ✅ |
| License | Apache-2.0 | MIT | ISC | MIT | 商业 |
| 社区活跃度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 国内生态 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
最佳实践
1. 按需引入减小体积
// ✅ 推荐:按需引入
import * as echarts from 'echarts/core'
import { BarChart } from 'echarts/charts'
import { GridComponent } from 'echarts/components'
import { CanvasRenderer } from 'echarts/renderers'
echarts.use([BarChart, GridComponent, CanvasRenderer])
// ❌ 避免:引入整个包
import * as echarts from 'echarts'2. 使用 Dataset 管理数据
// ✅ 推荐:使用 dataset 分离数据和配置
const option = {
dataset: {
dimensions: ['product', '2020', '2021', '2022'],
source: [
['Matcha Latte', 43.3, 85.8, 93.7],
['Milk Tea', 83.1, 73.4, 55.1],
['Cheese Cocoa', 86.4, 65.2, 82.5]
]
},
xAxis: { type: 'category' },
yAxis: {},
series: [
{ type: 'bar' },
{ type: 'bar' },
{ type: 'bar' }
]
}
// ❌ 避免:硬编码数据到 series3. 合理使用 notMerge 和 lazyUpdate
// 完全替换配置
chart.setOption(newOption, { notMerge: true })
// 合并配置(默认)
chart.setOption(newOption, { notMerge: false })
// 延迟更新(批量操作时提升性能)
chart.setOption(newOption, { lazyUpdate: true })4. 响应式处理
// ✅ 使用 ResizeObserver
const observer = new ResizeObserver(() => {
chart.resize()
})
observer.observe(container)
// ❌ 避免:直接监听 window resize
window.addEventListener('resize', () => {
chart.resize()
})5. 主题与暗色模式
// 动态切换主题
function toggleTheme(isDark: boolean) {
chart.dispose()
chart = echarts.init(container, isDark ? 'dark' : 'light')
chart.setOption(option)
}6. 性能优化:大数据量场景
const option = {
series: [{
type: 'line',
data: largeDataset, // 百万级数据
large: true,
largeThreshold: 2000, // 超过 2000 条启用大数据模式
sampling: 'lttb', // 使用 LTTB 下采样算法
showSymbol: false // 隐藏数据点
}]
}7. 地图数据引入
// 引入中国地图
import chinaGeoJSON from 'echarts/map/json/china.json'
echarts.registerMap('china', chinaGeoJSON)
// 使用地图
const option = {
geo: {
map: 'china',
roam: true
},
series: [{
type: 'map',
map: 'china',
data: [...]
}]
}技术局限与边界
-
包体积较大:完整引入 ECharts 约 300KB(gzip),即使按需引入也需要 100-200KB。对于轻量级图表需求,Chart.js(~92KB)或 ApexCharts 可能更合适。
-
高度定制化的局限:ECharts 通过配置项驱动,对于非标准图表(如自定义力导向图、复杂桑基图变体),定制成本较高。D3.js 提供更大的灵活性。
-
3D 能力有限:虽然 ECharts-GL 提供 3D 支持,但相比 Three.js、Deck.gl 等专业 3D 库,ECharts 的 3D 能力较为基础。
-
学习曲线:虽然基础图表容易上手,但 ECharts 的配置项体系庞大(数百个配置项),掌握高级特性需要时间。
-
国际化支持:ECharts 内置中文,但多语言支持需要额外配置。相比 Chart.js 的国际化方案,稍显复杂。
-
动画定制:ECharts 的动画系统相对固定,对于需要高度定制化动画效果的场景(如数据故事讲述),D3.js 或 Framer Motion 更合适。
-
React 集成:虽然官方提供
echarts-for-react,但在 React 生态中,Recharts、Victory、Visx 等原生 React 图表库更符合 React 开发者的使用习惯。 -
供应链安全风险:2026 年 5 月 npm 供应链攻击事件表明,即使是知名开源项目也可能面临安全风险。建议使用 lockfile、启用 npm 审计、定期更新依赖。
学习资源
官方资源
教程
- ECharts 官方教程
- ECharts 数据可视化入门到精通(慕课网)
- ECharts 系列教程(掘金)
社区资源
框架集成
2026 年现状
截至 2026 年 7 月,ECharts 的地位依然稳固:
-
v6.1.0 稳定发布:2026 年 5 月发布的 v6.1.0 是当前最新稳定版,引入了全新默认主题、暗色模式、动态主题切换、新增和弦图、蜂群图、散点抖动等图表类型,以及矩阵坐标系等新特性。
-
国内首选方案:ECharts 在国内数据可视化领域的主导地位进一步巩固。根据 npm 下载量和 GitHub 活跃度,ECharts 是国内使用最广泛的图表库,广泛应用于电商、金融、政务、数据分析等领域。
-
TypeScript 全面成熟:自 v5 开始全面 TypeScript 重写后,v6 进一步完善了类型定义,为开发者提供更好的类型推导和开发体验。
-
AI 集成:ECharts 推出了 MCP Server(Model Context Protocol),支持与 AI 助手集成,通过自然语言生成图表配置。
-
生态持续繁荣:
vue-echarts、echarts-for-react等封装组件持续更新,ECharts-GL、echarts-wordcloud 等扩展包保持稳定维护。 -
供应链安全事件:2026 年 5 月的 npm 供应链攻击事件(Shai-Hulud 恶意软件)影响了 300+ 个包,包括 ECharts 的 React 封装。这一事件提醒开发者重视依赖安全和供应链风险管理。
-
社区活跃度高:GitHub 66.8k Stars,npm 周下载量 900 万+,Issue 和 Discussion 活跃,社区贡献持续稳定。
-
与 AntV 的竞争格局:在国内市场,ECharts 与 AntV 形成双寡头格局。ECharts 以配置简单、开箱即用见长;AntV 以图形语法、高度定制化取胜。两者在不同场景各有优势。
-
国际市场认可:虽然 ECharts 起源于中国,但在国际市场也获得了广泛认可,被众多跨国企业和开源项目采用。
-
未来发展方向:ECharts 团队持续优化渲染性能、增强 3D 能力、改进移动端体验,并探索与 AI 技术的更深层次集成。