Apache ECharts logo

Apache ECharts

基于 JavaScript 的开源可视化图表库,提供 20+ 种图表类型、丰富的交互能力和强大的渲染性能,是国内数据可视化领域的首选方案。

精选工具可视化图表数据可视化Apache

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
GitHubhttps://github.com/apache/echarts
npmhttps://www.npmjs.com/package/echarts
最新版本v6.1.0(2026-05-18 发布)
LicenseApache-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
         ↑
    组件系统(标题、图例、提示框等)

核心特性

  1. 📊 丰富的图表类型:内置 20+ 种图表类型,覆盖折线、柱状、饼图、散点、地图、K 线、关系图、桑基图、旭日图、矩形树图等主流可视化需求。

  2. ⚡ 高性能渲染:基于 ZRender 渲染引擎,支持 Canvas 和 SVG 双引擎,可渲染百万级数据点。v6 版本进一步优化了大数据量下的渲染性能。

  3. 🎨 精美的可视化设计:提供多套内置主题(默认主题、暗色主题等),支持自定义主题。v6 引入全新默认主题,配色和视觉设计更加现代化。

  4. 🖱️ 丰富的交互能力:内置数据缩放(dataZoom)、图例开关、提示框(tooltip)、工具栏(toolbox)、视觉映射(visualMap)等交互组件,支持鼠标、触摸、键盘操作。

  5. 📱 响应式设计:支持图表自适应容器尺寸,提供 resize() 方法。v6 增强了移动端适配和响应式能力。

  6. 🌍 地图可视化:内置中国地图、世界地图数据(需额外引入),支持 GeoJSON 格式,可绘制省份、城市、自定义区域地图。

  7. 🎬 动画效果:支持图表初始化、数据更新、状态切换的平滑动画,提供多种动画缓动效果。

  8. 🔌 插件化扩展:通过扩展包提供额外能力:

    • echarts-gl:3D 图表、地球可视化、WebGL 加速
    • echarts-wordcloud:词云图
    • echarts-liquidfill:水球图
    • echarts-stat:数据统计工具
  9. 🌐 多框架集成:官方和社区提供 Vue、React、Angular、Svelte 等框架的封装组件,开箱即用。

  10. 📦 按需引入:支持 Tree-shaking,可以只引入需要的图表类型和组件,减小打包体积。

生态图

ECharts 的生态在 2025-2026 年已相当完善:

生态项目说明
ECharts核心库,提供 20+ 种图表类型
ECharts-GL3D 图表、地球可视化、WebGL 加速
ECharts-Wordcloud词云图扩展
ECharts-Liquidfill水球图扩展
vue-echartsVue 3 官方封装组件
echarts-for-reactReact 官方封装组件
ngx-echartsAngular 封装组件
ZRender底层渲染引擎(Canvas/SVG)
ECharts Stat数据统计工具(聚类、回归等)
ECharts Custom Series自定义系列扩展
ECharts MCP ServerAI 集成 MCP 服务器
Awesome ECharts社区资源集合

适用场景

  1. 数据大屏与仪表盘:ECharts 是国内数据大屏的首选方案,支持多种图表组合、自适应布局、实时数据更新,广泛应用于电商、金融、政务、物流等领域的可视化大屏。

  2. 数据分析平台:提供丰富的图表类型和交互能力,适合构建 BI 系统、数据报表、数据探索工具。支持数据缩放、筛选、联动等高级交互。

  3. 金融与股票系统:内置 K 线图、分时图、技术指标等金融专用图表,支持多时间周期、缩放、十字光标等金融场景特性。

  4. 地理信息可视化:支持中国地图、世界地图、GeoJSON 自定义地图,适合区域数据展示、热力地图、路径可视化等地理场景。

  5. 企业级管理后台:与 Ant Design、Element Plus 等 UI 框架深度集成,适合构建中后台系统的数据报表、统计图表。

  6. 移动端 H5 应用:v6 增强了移动端适配,支持触摸交互、响应式布局,适合移动端数据展示。

  7. 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-gl
import '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 图表和大规模数据渲染

性能优化建议

  1. 大数据量场景

    • 启用 large: truelargeThreshold 配置
    • 使用 appendData 增量加载数据
    • 考虑使用 ECharts-GL 的 WebGL 渲染
  2. 减少重绘

    • 避免频繁调用 setOption,使用 notMerge: false 合并配置
    • 使用 setOptionreplaceMerge 参数精确更新
  3. 按需引入

    • 只引入需要的图表类型和组件
    • 避免引入整个 echarts
  4. 响应式优化

    • 使用 ResizeObserver 监听容器尺寸变化
    • 防抖处理 resize() 调用

安全考量

  • XSS 防护:ECharts 默认不对数据进行 HTML 转义,在 formatter 函数中渲染用户输入时需要注意 XSS 防护
  • 数据验证:对于外部数据源,建议进行数据格式和范围验证
  • 供应链安全:2026 年 5 月 AntV 生态遭遇 npm 供应链攻击(Shai-Hulud 恶意软件),ECharts 的 React 封装包 echarts-for-react 也受到影响。建议使用 lockfile 固定版本,启用 npm 审计

技术对比

特性EChartsChart.jsD3.jsAntV G2Highcharts
包体积~300KB~92KB~90KB~150KB商业授权
图表类型20+8 种无限制(底层库)10+40+
TypeScript✅ 原生支持✅ 原生支持✅ 类型定义✅ 原生支持✅ 类型定义
渲染引擎Canvas/SVGCanvas/SVGSVG/Canvas/HTMLCanvas/SVG/WebGLSVG
学习曲线低(配置驱动)低(配置驱动)高(底层 API)中(图形语法)低(配置驱动)
交互能力丰富基础需自行实现丰富丰富
大数据量✅ 优秀⚠️ 一般⚠️ 需优化✅ 良好✅ 良好
3D 支持✅(ECharts-GL)✅(G2 3D)
地图支持✅ 内置✅ 需自行实现✅(L7)✅(付费)
响应式⚠️ 需自行实现
LicenseApache-2.0MITISCMIT商业
社区活跃度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
国内生态⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

最佳实践

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' }
  ]
}
 
// ❌ 避免:硬编码数据到 series

3. 合理使用 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: [...]
  }]
}

技术局限与边界

  1. 包体积较大:完整引入 ECharts 约 300KB(gzip),即使按需引入也需要 100-200KB。对于轻量级图表需求,Chart.js(~92KB)或 ApexCharts 可能更合适。

  2. 高度定制化的局限:ECharts 通过配置项驱动,对于非标准图表(如自定义力导向图、复杂桑基图变体),定制成本较高。D3.js 提供更大的灵活性。

  3. 3D 能力有限:虽然 ECharts-GL 提供 3D 支持,但相比 Three.js、Deck.gl 等专业 3D 库,ECharts 的 3D 能力较为基础。

  4. 学习曲线:虽然基础图表容易上手,但 ECharts 的配置项体系庞大(数百个配置项),掌握高级特性需要时间。

  5. 国际化支持:ECharts 内置中文,但多语言支持需要额外配置。相比 Chart.js 的国际化方案,稍显复杂。

  6. 动画定制:ECharts 的动画系统相对固定,对于需要高度定制化动画效果的场景(如数据故事讲述),D3.js 或 Framer Motion 更合适。

  7. React 集成:虽然官方提供 echarts-for-react,但在 React 生态中,Recharts、Victory、Visx 等原生 React 图表库更符合 React 开发者的使用习惯。

  8. 供应链安全风险:2026 年 5 月 npm 供应链攻击事件表明,即使是知名开源项目也可能面临安全风险。建议使用 lockfile、启用 npm 审计、定期更新依赖。

学习资源

官方资源

教程

社区资源

框架集成

2026 年现状

截至 2026 年 7 月,ECharts 的地位依然稳固:

  1. v6.1.0 稳定发布:2026 年 5 月发布的 v6.1.0 是当前最新稳定版,引入了全新默认主题、暗色模式、动态主题切换、新增和弦图、蜂群图、散点抖动等图表类型,以及矩阵坐标系等新特性。

  2. 国内首选方案:ECharts 在国内数据可视化领域的主导地位进一步巩固。根据 npm 下载量和 GitHub 活跃度,ECharts 是国内使用最广泛的图表库,广泛应用于电商、金融、政务、数据分析等领域。

  3. TypeScript 全面成熟:自 v5 开始全面 TypeScript 重写后,v6 进一步完善了类型定义,为开发者提供更好的类型推导和开发体验。

  4. AI 集成:ECharts 推出了 MCP Server(Model Context Protocol),支持与 AI 助手集成,通过自然语言生成图表配置。

  5. 生态持续繁荣vue-echartsecharts-for-react 等封装组件持续更新,ECharts-GL、echarts-wordcloud 等扩展包保持稳定维护。

  6. 供应链安全事件:2026 年 5 月的 npm 供应链攻击事件(Shai-Hulud 恶意软件)影响了 300+ 个包,包括 ECharts 的 React 封装。这一事件提醒开发者重视依赖安全和供应链风险管理。

  7. 社区活跃度高:GitHub 66.8k Stars,npm 周下载量 900 万+,Issue 和 Discussion 活跃,社区贡献持续稳定。

  8. 与 AntV 的竞争格局:在国内市场,ECharts 与 AntV 形成双寡头格局。ECharts 以配置简单、开箱即用见长;AntV 以图形语法、高度定制化取胜。两者在不同场景各有优势。

  9. 国际市场认可:虽然 ECharts 起源于中国,但在国际市场也获得了广泛认可,被众多跨国企业和开源项目采用。

  10. 未来发展方向:ECharts 团队持续优化渲染性能、增强 3D 能力、改进移动端体验,并探索与 AI 技术的更深层次集成。