Apache ECharts 调研:67K stars 的可视化基础设施,Canvas+SVG 双引擎 + 千万级数据,国内做技术绕不开

38次阅读
Apache ECharts 调研:67K stars 的可视化基础设施,Canvas+SVG 双引擎 + 千万级数据,国内做技术绕不开

Apache ECharts 是一款基于 JavaScript / TypeScript 的开源可视化图表库,2013 年由百度团队原创,2018 年捐赠给 Apache 软件基金会,2021 年晋升为 Apache 顶级项目 。13 年间,凭借 Canvas / SVG 双引擎一键切换 千万级数据实时渲染20+ 内置图表 + 任意组合,成为国内做技术绕不开的可视化基础设施——也是 HN 上罕见的 ” 中国开源但全球热门 ” 项目。

写在前面

数据可视化这事儿,国内国外走了两条完全不同的路。

国外:D3.js(数据驱动文档,低层 API,需要手写大量 SVG)→ Plotly.js(科学计算向)→ Observable Plot(声明式)→ Recharts / Victory(React 生态封装)

国内:百度 ECharts(2013)→ 蚂蚁 AntV / G2 / G6(2017)→ 字节 Bytedance Charts(2021)

ECharts 是国内生态的 事实标准 ——不是因为它最早,而是因为它 最完整。从最简单的柱状图到复杂的 3D / 地理可视化 / 关系图 / 桑基图,从 5 个数据点到 1000 万数据点实时渲染,从 PC 端到移动端响应式,从 Canvas 到 SVG 切换——ECharts 几乎覆盖了所有可视化场景。

飞熊做技术咨询,国内客户首屏 90% 用 ECharts——不是 D3,不是 Plotly,不是 Chart.js。本文带你深入 ECharts 的能力全景、技术架构、生态系统,以及它跟 Plotly / Dash / AntV / D3 的对比选型。

一、它解决什么问题

一句话 :ECharts 让你在 Web 端 零依赖 地画 20+ 种图表,并且支持 Canvas / SVG 双引擎 + 千万级数据实时渲染 + 完整无障碍

场景 例子 ECharts 表现
后台 Dashboard 折线图 / 柱状图 / 饼图 / 雷达图 20+ 图表直接用,配置项丰富
地理可视化 中国省份地图 / 世界地图 / 热力图 内置 GeoJSON + 百度地图扩展
大数据可视化 1000 万点散点图 / 实时时序 Canvas 渐进渲染 + 流加载
关系图谱 知识图谱 / 流程图 / 拓扑图 Graph / Sankey / Tree / Treemap 全套
3D 可视化 3D 柱状图 / 3D 地图 / WebGL 加速 ECharts GL 扩展(基于 WebGL)
金融图表 K 线图 / 烛台图 / 深度图 内置 candlestick + 200K 数据缩放
移动端 H5 图表 / 响应式 默认支持触摸事件 + 响应式设计
无障碍 屏幕阅读器 / 色盲模式 自动生成 aria 描述 + decal 图案

基本信息

维度 数据
GitHub apache/echarts
Stars 67,081池子里 stars 最高,比 Plotly 18K 高 3.7 倍)
Forks 19,807(极高,说明生态扩散广泛)
Open Issues 1,558(健康)
License Apache-2.0(无任何商用风险)
首次 commit 2013-04-0313 年老项目
最近 commit 2026-08-16(今天还在活跃
最近 push 2026-08-04(10 天前推过代码)
仓库大小 264 MB
主语言 TypeScript(v6 重构后从 JS 转向 TS)
最新版本 v6.1.0(2026-05-18)
项目状态 Apache 顶级项目(2021 年毕业
学术引用 Visual Informatics 2018(EI 期刊)

二、核心能力全景:6 大特性 + 20+ 内置图表

ECharts 官方把核心能力归纳为 6 大特性

1. Flexible Chart Types — 20+ 图表任意组合

类别 图表
基础图表 折线图 / 柱状图 / 饼图 / 散点图 / 雷达图 / K 线图 / 箱线图 / 热力图
高级图表 桑基图 / 旭日图 / 漏斗图 / 仪表盘 / 平行坐标 / 树图 / 矩形树图
关系图 关系图(Graph)/ 力导向图 / 流程图
地理 地图 / 百度地图 / 热力图 / 飞行线
3D 3D 柱状图 / 3D 散点图 / 3D 地图 / 3D 曲面(ECharts GL 扩展
文本 字符云(WordCloud)/ 文本标签云
混合 多图表叠加 + dataset 联动

每个图表都支持 任意组件组合——标题、图例、工具箱、缩放、视觉映射、提示框、数据集……所有元素都可配置。

2. Powerful Rendering Engine — Canvas + SVG 双引擎

引擎 适用场景 优势
Canvas 大数据量(>10K 点)/ 高频更新 / 移动端 性能强,单个 canvas 渲染
SVG 小数据 / 矢量要求 / 可访问性 / SEO DOM 可点击、样式可控、可被爬虫抓取

双引擎一键切换——一行代码切换渲染方式:

const chart = echarts.init(domElement, null, { renderer: 'canvas'});  // 或 'svg'

千万级数据实时渲染 ——核心是 渐进渲染(progressive rendering) + 流式加载(stream loading)

const chart = echarts.init(domElement);
chart.setOption({dataset: { source: largeDataArray},  // 1000 万点
  series: [{
    type: 'scatter',
    progressive: 4000,         // 渐进渲染阈值
    progressiveThreshold: 8000 // 流式阈值
  }]
});

官方 demo:1000 万数据点 实时拖拽缩放依然流畅(Canvas + 渐进渲染 + WebGL 加速)

3. Professional Data Analysis — 数据集 + 多维分析

chart.setOption({
  dataset: [{
    source: rawData,
    transform: [{
      type: 'filter',           // 数据过滤
      config: {dimension: 'year', gte: 2020}
    }, {
      type: 'boxplot',          // 数据聚合
      config: {itemName: 'score', value: 'value'}
    }, {
      type: 'cluster',          // 聚类
      config: {dimension: 'score'}
    }]
  }],
  series: [{type: 'boxplot'}]
});

支持 数据过滤 / 聚类 / 回归 —— 同一份数据多维度分析,不用前端再写 SQL 聚合。

4. Elegant Visual Design — 默认设计 + 主题生态

  • 默认配色 遵循可视化原则(ColorBrewer 调色板)
  • 响应式设计(resize 自动重绘)
  • 主题生态
  • 官方主题下载(theme builder
  • 第三方主题社区(echarts-themes-pkg
  • 暗色主题、复古主题、节日主题……

5. Healthy Community — 13 年生态

  • 19,807 forks(仅次于 D3.js / Three.js)
  • 官方社区:Examples Gallery + 几百个示例代码
  • 第三方扩展:ECharts GL(3D)/ Liquidfill(水球图)/ WordCloud(字符云)/ 百度地图扩展 / ArcGIS 地图扩展
  • 教程生态:中文社区最活跃(bookstack / CSDN / 知乎

6. Accessibility-Friendly — 无障碍

  • 自动生成 aria 描述(图表语义结构)
  • decal 图案(色盲模式用纹理代替颜色)
  • 符合 WCAG 2.0 标准
  • 论文引用:Visual Informatics 2018(EI 期刊,可正式学术引用)

三、差异化能力:v6 TypeScript 重构 + 自研 ZRender + V6 升级

1. v6 TypeScript 全面重构(2025 重磅升级)

ECharts 从 v5 开始就支持 TypeScript,v6(2025) 完成全面 TS 重构:

  • 类型安全:所有 option 配置项有完整 TS 类型提示
  • IDE 友好:VSCode 自动补全、类型检查
  • 生态统一:跟 React/Vue/Angular 框架集成更顺滑
  • 长期维护:TS 让核心代码库维护性大幅提升

2. 自研 ZRender 渲染引擎

ECharts 的渲染底层是 自研的 ZRender(轻量级 Canvas 库):

  • 矢量图元(Circle / Rect / Polygon / Sector / BezierCurve……)
  • 事件系统(鼠标 / 触摸 / 拖拽 / 缩放)
  • 动画系统(缓动函数 + 时间轴)
  • 文本排版(自动换行 + 多语言)
  • 可独立使用——很多项目用 ZRender 做画布(甚至不画图)

3. V6 Upgrade Guide 关键变化

v6 升级指南 包含:

  • TS 重构:option 配置类型化
  • 新图表:matrix 矩阵图(headless matrix 模式)
  • 新配置项containShape / clip / clockwise / cursorGrab
  • 数据可视映射增强visualMap.seriesTargets 支持多 series 维度映射
  • i18n:新增拉脱维亚语(LV)等多语言

4. 论文级学术认可

ECharts 是少数有 EI 期刊论文 背身的可视化库:

ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization

Visual Informatics, 2018

sciencedirect.com/science/article/pii/S2468502X18300068

技术选型时可以用论文背书——这是 D3.js / Plotly / Chart.js 都没有的学术深度。

四、生态系统:百度出身 → Apache 顶级 → 中国开源全球化样本

1. 出身时间线

2013 - 百度 ECharts 团队开源
      ↓
2018 - 捐赠 Apache 软件基金会(ASF 孵化器)↓
2021 - 毕业晋升为 Apache 顶级项目
      ↓
2025 - v6 TypeScript 全面重构
      ↓
2026 - v6.1.0(2026-05-18,最新稳定版)

2. 横向扩展生态

扩展 能力
ECharts GL WebGL 加速、3D 图表、3D 地图、大数据散点图
Liquidfill 水球图 单百分比数据可视化
WordCloud 字符云 文本权重可视化
百度地图扩展 在百度地图上叠加 ECharts 图表
ArcGIS 地图扩展 在 ArcGIS 地图上叠加 ECharts 图表
ECharts Studio 在线图表编辑器

3. 框架集成

框架
Vue vue-echarts(官方推荐)
React echarts-for-react
Angular ngx-echarts
原生 <script src="echarts.min.js">

4. 用户案例

ECharts 没有官方用户列表,但 国内互联网公司几乎全部在用

  • 百度(自家产品)
  • 阿里(AntV 是 G2 路线,但 ECharts 仍是主力)
  • 腾讯(QQ、微信、文档)
  • 字节跳动(飞书、抖音数据看板)
  • 美团 / 滴滴 / 小米 / 京东……
  • GitHub 上 ECharts 被 100,000+ 项目引用

Hacker News 评论:”It’s the best visualization library, but doesn’t get the recognition it deserves — because it’s from China.”
(它是最好的可视化库,但知名度跟实力不匹配——因为它来自中国)

五、对比 Plotly / Dash / AntV / D3.js / Chart.js

维度 Apache ECharts Plotly.js Dash AntV (G2/G6/L7) D3.js Chart.js
Stars 67,081 ~18K ~21K ~20K ~110K ~65K
协议 Apache-2.0 ✅ MIT ✅ Apache-2.0 ✅ MIT ✅ ISC ✅ MIT ✅
出身 百度 → Apache Plotly Inc. Plotly Inc. 蚂蚁金服 Observable 社区
主语言 TypeScript JavaScript Python TypeScript JavaScript JavaScript
渲染 Canvas + SVG Canvas + SVG React (Plotly.js) Canvas + SVG SVG(手动) Canvas
图表数 20+ 内置 ~30 复用 Plotly.js G2 20+ / G6 关系图 / L7 地图 无(底层) 8
大数据 ✅ 千万级 ✅ 50 万 ✅ Plotly.js ✅ L7 大数据 ⚠️ 手动优化 ❌ 万级
关系图 ✅ 内置 ⚠️ plotly-orca ⚠️ 弱 ✅ G6 强 ⚠️ 手动
地图 ✅ 内置 ✅ mapbox ✅ L7 强 ⚠️ 手动
3D ✅ ECharts GL ✅ plotly-3d ⚠️ 配合 Three.js
学习曲线 ⚠️ 中(配置项多) ✅ 低 ✅ 低(Python) ⚠️ 中 ❌ 高(底层) ✅ 低
配置项丰富度 ✅ 几百项 ✅ 多 ✅ 透传 Plotly ✅ 多 ✅ 全开放 ⚠️ 少
移动端 ✅ 触摸 + 响应式 ⚠️ 手动
无障碍 ✅ aria + decal ⚠️ 部分 ⚠️ 弱 ⚠️ 手动 ⚠️ 弱
学术引用 ✅ Visual Informatics 2018 ⚠️ 商业为主 ✅ 大量论文
中文文档 ✅ 最完整 ⚠️ 翻译 ⚠️ ✅ 完整 ⚠️ 翻译 ⚠️
商业支持 Apache(基金会) Plotly Inc. Plotly Inc. 蚂蚁 社区 社区

结论怎么选

你的场景 选谁
国内项目 / 中文文档 / Dashboard / 地理可视化 Apache ECharts
科学计算 / Jupyter / 学术 Plotly.js / Dash
Python 数据应用 + 不写 JS Dash
国内 + 蚂蚁生态 / 关系图谱(最强 G6) AntV
底层自定义 / 数据驱动文档 / 极致灵活 D3.js
极简 / 快速原型 / 移动端 H5 Chart.js
ECharts 已经是国内默认 ——技术选型不用纠结, 直接用 ECharts

对比已调研的飞熊 8 月 BI 栈

已调研项目 跟 ECharts 的关系
Plotly (298) 互补——Plotly 主打 Python / 科学计算,ECharts 主打 Web / Dashboard
Dash (299) 上下游——Dash 是 Python Web 框架,内部用 Plotly.js 渲染,跟 ECharts 是不同栈
next-ai-draw-io (297) 互补——draw.io 是流程图 / 思维导图工具,ECharts 是数据可视化
Apache Superset (270) / Metabase (274) 可视化底层——Superset / Metabase 内部很多图表用 ECharts 渲染(特别是 Superset 中国版)
ClickHouse (322) 上下游——ClickHouse 出查询结果,ECharts 渲染图表
Grafana (312) 不同栈——Grafana 是时序监控可视化,ECharts 是通用数据可视化

六、实战:3 步跑通 ECharts

Step 1:安装

# npm
npm install echarts --save

# yarn
yarn add echarts

# pnpm
pnpm add echarts

# CDN(直接用)<script src="https://cdn.jsdelivr.net/npm/echarts@6/dist/echarts.min.js"></script>

# 按需引入(只打包用到的图表)import * as echarts from 'echarts/core'
import {LineChart, BarChart} from 'echarts/charts'
import {GridComponent, TooltipComponent, LegendComponent} from 'echarts/components'
import {CanvasRenderer} from 'echarts/renderers'
echarts.use([LineChart, BarChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer])

Step 2:基础柱状图

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>ECharts Demo</title>
  <script src="https://cdn.jsdelivr.net/npm/echarts@6/dist/echarts.min.js"></script>
</head>
<body>
  <div id="main" style="width: 800px; height: 400px;"></div>
  <script>
    const chart = echarts.init(document.getElementById('main'));

    chart.setOption({title: { text: '月销售额'},
      tooltip: {trigger: 'axis'},
      legend: {data: ['销售额'] },
      xAxis: {
        type: 'category',
        data: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月']
      },
      yAxis: {type: 'value'},
      series: [{
        name: '销售额',
        type: 'bar',
        data: [12000, 19000, 15000, 22000, 28000, 31000],
        itemStyle: {color: '#5470c6'}
      }]
    });
  </script>
</body>
</html>

Step 3:进阶场景(千万级数据 + 异步加载)

// 1. 千万级数据渐进渲染
const chart = echarts.init(document.getElementById('main'), null, {renderer: 'canvas'});

const rawData = [];
for (let i = 0; i < 10000000; i++) {rawData.push([Math.random() * 100, Math.random() * 100, Math.sqrt(i)]);
}

chart.setOption({tooltip: { trigger: 'item'},
  series: [{
    type: 'scatter',
    symbolSize: 2,
    data: rawData,
    progressive: 4000,          // 渐进渲染阈值
    progressiveThreshold: 8000  // 流式加载阈值
  }]
});

// 2. 异步加载大数据
$.get('https://api.example.com/large-data').done(data => {
  chart.setOption({dataset: { source: data},
    series: [{type: 'scatter'}]
  });
});

// 3. 切换渲染引擎(Canvas → SVG)chart.dispose();
const svgChart = echarts.init(document.getElementById('main'), null, {renderer: 'svg'});
svgChart.setOption(option);

// 4. 响应式 resize
window.addEventListener('resize', () => chart.resize());

七、风险与坑

1. 配置项学习曲线陡峭

ECharts 的 option 配置项 几百个,新手上手需要查文档。对比 Chart.js 的 8 个图表 / 简单配置,ECharts 的复杂度高。

缓解:先用 Examples Gallery 复制示例改数据,逐步深入。

2. 包体积大(完整版 ~1MB)

完整 echarts.min.js 约 1MB gzip 后 300KB+——对性能敏感的移动端 H5 不友好。

缓解 :用 按需引入(只 import 用到的图表和组件),通常可降到 100-200KB。

3. 大数据场景需要手动优化

虽然支持千万级,但默认配置可能卡顿。需要调 progressive / progressiveThreshold / sampling / large 等参数。

4. 中文文档版本有时延后

英文 changelog 比中文翻译快 1-2 周。

缓解:英文为主、中文为辅。

5. 旧版本 v3/v4 兼容性

网上很多教程还在用 v3 / v4 语法,v5/v6 有 breaking changes。

缓解:直接看 v6 官方文档 + 升级指南。

6. React / Vue 集成需要第三方包

官方没有原生 React/Vue 组件,需要 echarts-for-react / vue-echarts

7. 19,807 forks = 生态扩散的双刃剑

生态丰富意味着 第三方教程质量参差不齐——百度搜出来的中文教程 30% 已经过时。

缓解:优先看官方 examples + handbook + GitHub issues。

八、总结

Apache ECharts 不是 ” 百度的一个产品 ”——它是 中国开源全球化的样本:从百度内部工具到 Apache 顶级项目,从国内默认到 HN 热门第二。

3 个最值得用的理由

  1. 国内生态事实标准 :67K stars / 19,807 forks / 13 年积累 / 百度 → Apache 顶级项目—— 国内做技术选型不用纠结,直接用
  2. 完整可视化能力 :20+ 图表 + Canvas/SVG 双引擎 + 千万级数据 + 关系图 + 3D + 地图—— 一个库覆盖所有可视化场景
  3. 学术 + 工程双背书 :Visual Informatics 2018 论文 + Apache 顶级项目 + TS 重构 + 活跃社区—— 技术深度足够支撑技术咨询门面

1 句建议

直接打开 ECharts Examples Gallery 选一个最像你需求的 demo,复制代码改数据——比看 3 篇教程上手快。

如果你的场景是 Python 数据应用 / Jupyter 集成 ,看 Plotly (298) / Dash (299);如果你的场景是 关系图谱 / 蚂蚁生态 ,看 AntV (G2/G6/L7);如果你的场景是 底层自定义 / 数据驱动文档,看 D3.js

在国内做 Web 端数据可视化,ECharts 是默认答案


参考

正文完