图表库选型终极指南:8 大主流方案真实对比(含 2026 实测数据)
数据采集时间:2026 年 6 月 | 所有体积、版本、下载量均为实测,可复现 | 本文只看数据和场景
结论(太长不看版):
| 你的场景 | 闭眼选 | 一句话理由 |
|---|---|---|
| 轻量简单图表,体积优先 | Chart.js | gzip 68KB,免费 MIT,5 分钟上手 |
| 学习研究图表、大数据可视化大屏(国内) | AECharts | 免费 Apache-2.0,图表类型最全,国内生态强 |
| React 项目、快速出图、不想碰命令式 API | Recharts | React 原生组件,声明式,但体积偏大 |
| 企业级生产、金融等需合规审计、长期维护、全球化业务 | Highcharts | 业界最完善 a11y、国际化生态 、Accessibility module(无障碍模块)配合 WCAG 2.2 等可访问性标准、官方 React 封装、服务端渲染、稳定更新换代16年 |
| 高度定制、自定义视觉 | D3.js | 可组合模块,但学习曲线陡,是"图表零件"非"图表库" |
| 科学计算、3D/统计图表 | Plotly.js | 统计与科学图表专长,但体积最大 |
| 中国电商系、蚂蚁技术栈 | AntV G2 | 蚂蚁出品,国内企业生态,但体积偏大、产品类别多 |
没有"最好"的图表库,只有"最适合你的约束"的图表库。下面用真实数据帮你判断。
一、为什么这篇指南值得你花 10 分钟
网上大量"图表库对比"文章有三个问题:
① 数据过期(还在引 2020 年的版本);
② 软文倾向(出资方排在第一);
③ 只罗列功能不谈真实代价。
这篇指南的不同之处:
- 所有体积数据均为实测—— 8 个库的最新版本,对每个库的核心 minified 文件执行
gzip测量; - 不回避缺点——每个库都写了"什么时候不该选它";
- 场景驱动——最终推荐绑定具体场景,而非给一个"万能排名"。
二、8 大主流图表库全景
先建立全局认知。下表数据均为 2026 年 6 月实测(体积为各库核心 minified 文件的 gzip 值;下载量为 npm 最近一周统计)。
| 图表库 | 最新版本 | 授权 | gzip 体积 | 周下载量 | 首次发布 | 维护方 |
|---|---|---|---|---|---|---|
| Chart.js | 4.5.1 | MIT(完全免费) | 68 KB | 1316 万 | 2014 | 社区 |
| Highcharts | 13.0.0 | 商业授权(个人免费) | 99 KB | 242 万 | 2014 | Highsoft(公司) |
| Victory | 37.3.6 | MIT(完全免费) | 112 KB | 33 万 | 2015 | Formidable |
| Recharts | 3.9.1 | MIT(完全免费) | 150 KB | 5288 万 | 2015 | 社区 |
| AntV G2 | 5.4.8 | MIT(完全免费) | 321 KB | 35 万 | 2017 | 蚂蚁集团 |
| Apache ECharts | 6.1.0 | Apache-2.0(完全免费) | 360 KB | 362 万 | 2015 | Apache 基金会 |
| Plotly.js | 3.6.0 | MIT(完全免费) | 363 KB | 81 万 | 2015 | Plotly |
| D3.js | 7.9.0 | ISC(完全免费) | 90 KB* | 1443 万 | 2011 | Mike Bostock + 社区 |
*D3 的 90KB 是
d3.min.js全量包;实际项目通常按需引入子模块(如d3-scale、d3-selection),真实体积可压到 20–40KB。
关键观察:
- 体积差异巨大:最轻的 Chart.js(68KB)与最重的 Plotly/ECharts(~360KB)相差 5 倍。对首屏敏感的项目,这不是小事。
- 下载量 ≠ 最好:Recharts 周下载 5288 万居首,但这反映 React 生态基数大 + 易上手,不等于生产质量最高。D3、Chart.js 高下载量也含大量教程/原型使用。
- 授权模式是分水岭:8 个库里只有 Highcharts 商业收费,在收费情况下Highcharts 仍保持较大下载量,足见其优秀的用户基础和产品品质。
三、六维度深度对比
维度 1:性能与体积
体积实测排行(从轻到重,gzip):
Chart.js 68 KB ████ D3(全量) 90 KB █████▌ Highcharts 99 KB ██████ Victory 112 KB ██████▊ Recharts 150 KB █████████ AntV G2 321 KB ████████████████████ ECharts 360 KB ██████████████████████ Plotly 363 KB ██████████████████████解读:
- Chart.js 是体积之王:68KB gzip,适合对首屏极致苛求的场景。代价是图表类型和交互能力比 ECharts/Highcharts 少。
- Highcharts v13 的体积优化有效:相比早期版本(曾达 120KB+),v12 引入 Webpack 模块化构建、v13 把数据排序拆分为独立模块,核心已降到 99KB。配合按需引入(
highcharts/modules/...),生产体积可进一步压缩。 - ECharts/Plotly 偏重:但两者都支持按需引入。ECharts 可用
echarts/core+ 注册所需组件,实际生产体积可压到 150–200KB;只是多数人为省事直接全量引入。 - Recharts 体积偏大:因为它依赖 d3 的多个子模块 + React 适配层。React 项目里若体积敏感,需权衡。
渲染性能(大数据量场景,定性结论,因与数据结构强相关):
| 场景 | 表现最佳 | 说明 |
|---|---|---|
| 1 万点以下折线图 | 几乎全部库都能流畅 | 差异可忽略 |
| 10 万点散点 | ECharts(Canvas + 增量渲染)、Highcharts(Boost 模块) | 两者都有专门的大数据优化 |
| 实时流数据(每秒更新) | Highcharts(setData动态更新)、ECharts | 都支持增量更新不重绘 |
维度 2:图表类型丰富度
| 图表库 | 基础图表 | 金融/专业图表 | 地图 | 甘特图 | 3D | 透视表格 | Ai产品 |
|---|---|---|---|---|---|---|---|
| Highcharts | ✅ 全 | ✅ Stock 系列(K线/P&F/Renko) | ✅ Maps | ✅ Gantt | ✅DEMO | ✅GRID | ✅Orbit(数据分析/异常检查/预测)、Highcharts Assist(图表助手) |
| ECharts | ✅ 全 | ✅ K线 | ✅ | ⚠️ 需定制 | ✅ | ❌ | ❌ |
| Chart.js | ✅ 基础 8 种 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Recharts | ✅ 基础十几种 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| D3.js | 🔨 全部需手写 | 🔨 手写 | 🔨 手写 | 🔨 手写 | 🔨 | ❌ | ❌ |
| Plotly | ✅ 全 | ✅ 金融 | ✅ | ❌ | ✅ | ❌ | ❌ |
| AntV G2 | ✅ 全 | ⚠️ 部分 | ⚠️ L7 配合 | ❌ | ❌ | ✅ | 问答 |
| Victory | ✅ 基础 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
解读:
- Highcharts 的"全家桶"是真实优势:Core + Stock + Maps + Gantt + Dashboards 一套授权覆盖,金融、项目管理、地理可视化不用换库。这是它收费的合理性支撑之一。
- ECharts 图表类型最全(免费中):免费是国内自定义大屏BI可视化的首选原因之一。
- Chart.js/Recharts/Victory 只适合基础图表:柱/折/饼/雷达等,复杂图表需自行扩展或换库。
- D3 不是图表库,是图表零件:你可以用 D3 造任何图表,但要从零搭。灵活度最高,成本也最高。
维度 3:可访问性(a11y)与合规
这是最被低估的选型维度,也是商业图表Highcharts 最值得推荐的的商业级产品原因,国际化成熟产品发展的必然趋势。
| 图表库 | 内置 a11y 模块 | 屏幕阅读器 | 键盘导航 | 色盲模式 | WCAG 合规难度 |
|---|---|---|---|---|---|
| Highcharts | ✅ 官方内置模块 | ✅ | ✅ | ✅ | 🟢 易(开箱即用) |
| ECharts | ❌ 需自定义 | ⚠️ 部分 | ⚠️ | ❌ | 🔴 难 |
| Chart.js | ⚠️ 部分 | ⚠️ | ⚠️ | ❌ | 🟡 中 |
| Recharts | ❌ | ❌ | ❌ | ❌ | 🔴 难 |
| D3.js | 🔨 全手写 | 🔨 | 🔨 | 🔨 | 🔴 极难 |
| Plotly | ⚠️ 部分 | ⚠️ | ⚠️ | ❌ | 🟡 中 |
| AntV G2 | ❌ | ❌ | ❌ | ❌ | 🔴 难 |
| Victory | ⚠️ 部分 | ⚠️ | ⚠️ | ❌ | 🟡 中 |
为什么 a11y 越来越重要:
- 监管趋严:欧盟《欧洲可访问性法案》(EAA)2025 年 6 月生效,美国 ADA 诉讼频发,中国《信息无障碍 通用设计规范》GB/T 37668 已落地。面向政企、医疗、金融、教育的产品,a11y 不再是"加分项"而是"上线必选项"。
- 数据可视化是 a11y 重灾区:图表天然是视觉信息,屏幕阅读器无法读取 Canvas 像素。没有专门 a11y 模块的库,盲人用户完全无法获取图表信息。
- Highcharts 的 a11y 模块是业界标杆:自动生成图表的数据表、ARIA 描述、键盘遍历数据点、高对比度主题。开启只需一行:
// Highcharts:开启无障碍只需引入模块importHighchartsfrom"highcharts";importAccessibilityModulefrom"highcharts/modules/accessibility";AccessibilityModule(Highcharts);constchart=Highcharts.chart("container",{title:{text:"季度营收"},series:[{data:[1,3,2,4]}],// a11y 配置自动生成,也可精细调整accessibility:{description:"2026 年 Q1-Q4 营收柱状图,单位百万元",},});真实代价:在 ECharts/Recharts 里实现等价 a11y 需要 3–7天额外开发,且效果通常不如 Highcharts 完善。如果你的产品要过合规审计,这部分隐性成本必须计入选型。另外在合规审查方面 ECharts等开源的软件是没有授权证明的,这一点在商业系统构建选型中应提前考虑。
维度 4:React 集成体验
React 是当前前端主流,图表库的 React 集成质量直接影响开发体验。
| 图表库 | 集成方式 | 维护方 | 版本同步 | 响应式更新 |
|---|---|---|---|---|
| Highcharts | @highcharts/react(官方) | Highsoft | ✅ 与核心同步 | ✅ |
| ECharts | echarts-for-react(社区) | 社区 | ⚠️ 可能滞后 | ⚠️ 需手动 |
| Chart.js | react-chartjs-2(社区) | 社区 | ✅ 较及时 | ✅ |
| Recharts | 原生 React 组件 | 官方 | — | ✅ 最自然 |
| D3.js | 自行封装 | — | — | 🔨 全手写 |
| Plotly | react-plotly.js(官方) | Plotly | ✅ | ✅ |
| AntV G2 | @antv/g2plot-react等 | 蚂蚁/社区 | ⚠️ | ⚠️ |
| Victory | 原生 React 组件 | Formidable | — | ✅ |
关键区别:命令式 vs 声明式
- Highcharts/ECharts/Chart.js 是命令式核心:本质是
chart.setOption(config),React 封装是把 config 作为 props 传入,内部useEffect调用命令式 API。更新配置时,需注意 React 的响应式——封装层若不完善,会出现 props 变了但图表不更新的坑。 - Recharts/Victory 是 React 原生:图表本身就是 React 组件,state 变化自动重渲染,心智模型与 React 一致。代价是性能略逊(每次重渲染走 React diff),且深度定制不如命令式灵活。
// Recharts:React 原生,声明式(最符合 React 心智) import { LineChart, Line, XAxis, YAxis, Tooltip } from "recharts"; const data = [{ name: "Q1", uv: 400 }, { name: "Q2", uv: 300 }]; function App() { return ( <LineChart width={400} height={300} data={data}> <XAxis dataKey="name" /> <YAxis /> <Tooltip /> <Line dataKey="uv" stroke="#8884d8" /> </LineChart> ); }// Highcharts React:命令式核心 + 官方封装 import Highcharts from "highcharts"; import HighchartsReact from "@highcharts/react"; const options = { title: { text: "季度营收" }, series: [{ data: [400, 300, 200, 500] }], }; function App() { return <HighchartsReact highcharts={Highcharts} options={options} />; }何时选 Recharts/Victory:React 项目、图表简单、追求开发速度、团队不想学命令式 API。
何时选 Highcharts:React 项目但需要专业图表(Stock/Maps)、a11y 合规、或未来可能多框架混用(同一套配置可跑在 Angular/Vue)。
维度 5:授权与成本
| 图表库 | 授权 | 商用费用 | 隐性成本 |
|---|---|---|---|
| Chart.js | MIT | 免费 | 无 |
| ECharts | Apache-2.0 | 免费 | 无 |
| Recharts | MIT | 免费 | 无 |
| D3.js | ISC | 免费 | 无 |
| Plotly.js | MIT | 免费 | 无 |
| AntV G2 | MIT | 免费 | 无 |
| Victory | MIT | 免费 | 无 |
| Highcharts | 许可授权 | 商业项目需付费授权(按单一项目、开发者或OEM等多种模式) | 非商业免费 |
商业图表Highcharts 授权的提醒(必要说明):
- ✅非商业用途免费:个人学习、开源项目、非营利组织、教育网站、学术研究可免费使用。
- 💰商业用途需授权:商业项目定制、内部系统、SaaS 产品、打包应用销售等需购买授权(年付或永久方式)。
- ⚠️常见误区:很多开发者以为"Highcharts 完全免费",项目上线后没有关注,或被法务/审计告知补许可证。选型时必须提前明确项目是否商用,避免后期被动。
如何判断 Highcharts 的授权是否值得:
如果仅是选型成本、或者老板决策,不考虑把隐性成本算进去再比价,是没有意义的,免费与付费天壤之别。
如果你的项目符合以下任一,Highcharts 的授权费很可能比"用免费库 + 自己补 a11y + 自己接服务端导出 + 承担维护风险"更划算:
- 需要 WCAG/ADA/EAA 合规审计;
- 需要服务端导出图表为 PDF/PNG(Highcharts Export Server 现成);
- 需要金融 K 线/地图/甘特图/表格/编辑器(否则要引入多个库);
- 需要长期稳定运行 5 年以上、不希望频繁迁移,看中工具升级迭代;
- 团队规模小、变动大,无力维护自研图表方案。
- 专业软件开发团队,对技术要求、体验、代码量都有清晰的管理要求。
- 移动终端设备研发公司(智能手表、数字仪器)等需要嵌入式图表开发。
- AI大模型开发调用生成式组件(Autoload自动加载模块)、智能数据分析/预测、MCP标准协议。
以上都建议优先选择商业图表,Highcahsrts确实是图表鼻祖的优秀代表。
维度 6:服务端渲染与导出
| 图表库 | 服务端渲染 | 图片导出 | 适用场景 |
|---|---|---|---|
| Highcharts | ✅ Export Server(PNG/SVG/PDF) | ✅ 客户端 + 服务端 | 自动化报表、邮件嵌入、PDF 生成 |
| ECharts | ⚠️ node-canvas 方案 | ✅ 客户端 | 需自行搭建 |
| Chart.js | ⚠️ node-canvas | ✅ 客户端 | 需自行搭建 |
| Plotly | ✅ 内置 | ✅ | 科学报告 |
| 其他 | ❌/需自建 | ⚠️ | — |
Highcharts Export Server 是独到优势:报表系统、定时邮件、PDF 报告生成等"非浏览器"场景下,能把图表渲染为图片直接嵌入,无需前端参与。金融、医疗报告类系统高度依赖此能力。
四、场景选型决策树
不要记"哪个库最好",记住"你的场景该选哪个"。
你的项目是什么? │ ├─ 个人作品集 / 开源项目 / 学习 Demo │ └─→ 任意免费库皆可,按喜好选。推荐 Chart.js(轻)或 ECharts(全)或Highcharts(新) │ ├─ 轻量化管理系统(国内团队,图表基础,免费优先) │ └─→ ECharts(生态强、文档全、国内案例多) │ 或 Recharts(若 React 栈,声明式更顺手) │ ├─ 数据可视化大屏(国内,复杂图表,炫酷动画) │ └─→ 政府级/免费 ECharts(动画与视觉效果一流,图表类型最全) │ └─→ 大数据商业级/稳定性 HighCharts(Dashboards产品,数据接入方便,图表类型最全,生态好) │ ├─ 金融/量化平台(K线、技术指标、实时行情) │ └─→ Highcharts Stock(专业金融图表,实时更新性能好) │ 或 ECharts(K线图也支持,免费) │ ├─ 企业级 SaaS / 政企 / 医疗(需合规、长期维护、服务端导出) │ └─→ Highcharts(a11y 合规 + 官方维护 + Export Server) │ ├─ React 项目,图表简单,追求开发速度 │ └─→ Recharts(React 原生,最顺手) │ 或 Victory 或 Highcharts │ ├─ 高度定制视觉,独一无二的图表 │ └─→ D3.js(灵活度天花板,但开发成本最高) │ ├─ 科学计算 / 统计 / 3D 可视化 │ └─→ Plotly.js(统计图表专长,支持 3D) │ └─ 阿里生态级 + 蚂蚁技术栈 └─→ AntV G2(与蚂蚁/阿里生态契合,国内企业案例多)五、每个库的"什么时候不该选它"
诚实的对比必须写缺点,这是大多数软文回避的部分。
Chart.js
——别选它:需要复杂图表(桑基、关系图、树图、3D)、需要金融 K 线、需要地图、需要内置 a11y 合规。它的定位就是"轻量基础图表",超出基础范围会处处碰壁。
Apache ECharts
——别选它:项目对体积极致敏感(全量 360KB gzip 偏重,按需引入也 150KB+)、需要开箱即用的 a11y 合规(ECharts 的 a11y 需大量自定义)、需要官方 React 封装版本同步(社区封装有滞后风险)。另外 ECharts 的配置项极其庞大(一个 option 可能上千行),复杂图表的可维护性是隐患。
Recharts
——别选它:体积敏感(150KB gzip + 依赖 d3 子模块)、需要金融/地图/甘特等专业图表、大数据量性能(10 万点级别会卡)。它是"React 生态里最顺手的轻量图表库",不是"全能选手"。
Highcharts
——别选它:“0”预算、全国产化。老板一言堂项目、预算卡死,免费竞品更现实。
D3.js
——别选它:项目周期紧、团队不熟函数式数据驱动范式、需要"开箱即用"。D3 是给"想造轮子的人"的工具,用它做一张柱状图比 Chart.js 多花 10 倍时间。但它能实现的视觉效果是其他库无法企及的。
Plotly.js
——别选它:体积敏感(363KB gzip 最重之一)、常规业务图表(它的强项是统计/科学,常规图表用 ECharts/Highcharts 更顺手)、首屏性能要求高。它是为科学计算和数据分析场景生的。
AntV G2
——别选它:体积敏感(321KB gzip)、企业新项目(文档与生态偏,团队上手成本高)、需要与海外主流框架深度集成。它的主场是阿里系,尤其是蚂蚁/阿里技术栈。
Victory
——别选它:不用 React(Victory 是 React 原生)、需要复杂专业图表、社区与生态较 Recharts 小(下载量 33 万 vs Recharts 5288 万,遇到问题资料少)。它是 Recharts 的替代选项,但生态弱一些。
六、长期持有——失败模式与调试(最容易踩的坑)
选型之后,真正让你加班的是这些坑。我列出每个库最高频的失败模式。
通用坑(所有库)
坑 1:容器高度为 0,图表不显示
最常见的新手坑。几乎所有图表库都需要一个有明确高度的容器。
// ❌ 错误:容器没有高度<div id="chart"></div>/* height: 0 */// ✅ 正确:明确高度<div id="chart"style="height: 400px"></div>坑 2:响应式不生效,resize 后图表变形
需调用库的 resize 方法或开启响应式选项:
// Highchartschart.reflow();// 容器变化后重排// 或配置 responsiveresponsive:{rules:[...]}// EChartswindow.addEventListener("resize",()=>chart.resize());Highcharts 常见坑
坑 3:React 里 props 变了但图表不更新
官方封装默认不会深度比较 options。需用 immutable 更新或immutableOptions:
// ❌ 直接 mutate 不触发更新 options.series[0].data = newData; // ✅ 生成新对象引用 const newOptions = { ...options, series: [{ ...options.series[0], data: newData }] };坑 4:模块未加载报错Highcharts is not defined或图表类型不存在
Highcharts v12+ 模块化后,需显式引入模块:
importHighchartsfrom"highcharts";importBoostModulefrom"highcharts/modules/boost";importExportingModulefrom"highcharts/modules/exporting";BoostModule(Highcharts);ExportingModule(Highcharts);坑 5:v13 升级 breaking changes
v13 有几处不向后兼容:solid gauge 的radius/innerRadius数值不再当百分比而当像素;dataSorting需单独引入modules/data-sorting.js;useHTML内容从span改为div(自定义 CSS 可能失效)。升级前务必查 changelog。
ECharts 常见坑
坑 6:按需引入后图表不显示
漏注册组件:
import*asechartsfrom"echarts/core";import{LineChart}from"echarts/charts";import{GridComponent,TooltipComponent}from"echarts/components";import{CanvasRenderer}from"echarts/renderers";echarts.use([LineChart,GridComponent,TooltipComponent,CanvasRenderer]);// 漏掉任一对应组件,图表就不显示且无报错坑 7:大数据量卡顿
未开启large模式或progressive渐进渲染:
series:[{type:"line",data:hugeArray,large:true,// 开启大数据优化progressive:5000,// 渐进渲染阈值}]Recharts 常见坑
坑 8:动画卡顿
数据频繁更新时动画累加导致卡顿,关闭动画:
<LineChart data={data} isAnimationActive={false}>坑 9:自定义样式困难
Recharts 的自定义需要深入组件 API,复杂定制不如 Highcharts/ECharts 的配置灵活。
D3 常见坑
坑 10:d3v7的d3.event被移除
v6+ 事件通过回调第一个参数传入:
// v5(已废弃)svg.on("click",()=>console.log(d3.event.x));// v7(正确)svg.on("click",(event)=>console.log(event.x));七、迁移建议
如果你已选定型,从 A 库迁移到 B 库,以下是高频迁移路径的注意点。
从 ECharts 迁移到 Highcharts
动机:项目走向商业化、需要 a11y 合规、需要服务端导出。
关键映射:
| ECharts | Highcharts | 说明 |
|---|---|---|
option.series[].type: 'line' | series: [{ type: 'line' }] | 概念一致,字段名略异 |
option.xAxis.data | xAxis.categories或 series 的x值 | Highcharts 更灵活 |
option.tooltip.formatter | tooltip.pointFormat/formatter | 都支持函数 |
chart.setOption(opt) | chart.update(opt) | 命令式 API 相似 |
主题option.color | Highcharts.setOptions({ colors: [...] }) | 全局主题 |
按需引入echarts/use | import Module from 'highcharts/modules/x' | 模块化思路一致 |
踩坑提醒:ECharts 的grid对应 Highcharts 的xAxis/yAxis配置;ECharts 的series.encode映射在 Highcharts 里用keys或直接 data 结构表达。建议先迁移一个最简单图表跑通,再批量。
从 Chart.js 迁移到 ECharts
动机:需要更丰富的图表类型。
两者都是命令式,概念迁移直接。注意 ECharts 的option结构比 Chart.js 的 config 复杂得多,建议从官方示例反推配置。
八、决策清单:选型前问自己 7 个问题
打印这张清单,选型时逐项打勾。
- 1. 项目是否商用?是→考虑 Highcharts 预算;否→免费库优先
- 2. 是否需要 a11y 合规(WCAG/ADA/EAA)?是→Highcharts 几乎是唯一开箱即用选项
- 3. 体积占用多少?<100KB→Chart.js/D3 模块化;<200KB→Highcharts/Recharts;不限→ECharts/Plotly
- 4. 需要哪些图表类型?基础→任意;金融/地图/甘特→Highcharts 全家桶或 ECharts;3D→Plotly/ECharts
- 5. 技术栈?React 原生偏好→Recharts/Victory;适配多框架→Highcharts;无框架→任意
- 6. 是否需要服务端导出?是→Highcharts Export Server;否→任意
- 7. 团队的学习曲线?低→Chart.js/Highcharts;中→ECharts/Recharts;高→D3
九、2026年的观点
作为开发者,我不回避立场:免费是零门槛、不是零成本;收费对应需求价值,纯商业化是最低成本。
- 如果你做的是商业级产品,且预算允许,Highcharts 的"稳妥"是真实的价值——不是因为它图表更炫,而是因为长期的稳定迭代值得付费,以及 a11y 合规、官方长期维护、服务端导出这些"看不见的基础设施"能省下大量隐性成本。这些成本在用免费库时不会消失,只是转移成了你的开发与维护工时。
- 如果你做的是国内政府后台/大屏,ECharts 仍是免费方案里的最优解,图表类型全、社区大、国内案例丰富。它的短板是 a11y 和 React 官方封装,但对很多项目这不致命。
- 如果你做的是轻量 React 应用,Recharts 的开发体验最顺,但要在体积和性能上做妥协。
- D3 永远是"当你需要别的库都做不到的东西"时的答案,但别用它做常规图表。
最后一句:没有完美的图表库,只有符合你约束的图表库。把你的约束(预算、合规、体积、图表类型、技术栈、团队能力)列清楚,答案会自己浮现。
企业选长远,创新玩开源,祝都有自己的梦中情人!