Vue3中使用ECharts创建常用统计图表
前言
本文面向已经具备 Vue 3 项目、并且可以在组件中导入 echarts 的读者。从一个可复用的组件模板开始,随后通过常见业务数据演示统计图表配置与动态更新方法。
基础组件模板
下面的单文件组件可以直接作为图表组件使用。它以月度访问量趋势折线图为初始内容,后文每个案例的 option 都可以替换这里的同名对象。
1 | <template> |
图表绘制依赖容器尺寸,因此容器必须具有明确高度。浏览器窗口变化时调用 resize,图表才能重新适配可用宽度。组件卸载时移除监听并执行 dispose,可以释放实例持有的 DOM 和事件资源,避免路由切换后残留旧实例。
常用配置项
| 配置项 | 作用 |
|---|---|
title |
设置图表标题和标题位置等信息。 |
tooltip |
配置鼠标悬停或触发时显示的数据提示。 |
legend |
显示系列图例,便于比较或切换数据系列。 |
grid |
调整直角坐标系在容器中的边距,为坐标标签预留空间。 |
xAxis / yAxis |
定义类目轴或数值轴,以及轴标题、刻度和数据。 |
series |
指定图表类型及其呈现的数据、样式和交互行为。 |
dataset |
集中管理结构化数据,使多个系列可以共享数据源。 |
折线图:月度订单趋势
适用场景:折线图适合呈现按时间连续变化的指标,例如观察订单数量是否持续增长。示例中六个数值分别表示 1月 到 6月 的订单数,依次为 320、410、368、520、610 和 745。
1 | const lineData = [320, 410, 368, 520, 610, 745]; |
smooth 使趋势线过渡更平滑,areaStyle 则在折线下方绘制面积,便于强调数据规模。
柱状图:产品销售额对比
适用场景:柱状图适合横向比较多个离散类别的数值。示例数据表示云主机、对象存储、数据库、CDN 和短信五类产品的销售额,单位为万元,对应数值为 [86, 124, 98, 156, 112]。
1 | const productSales = [86, 124, 98, 156, 112]; |
饼图:渠道访问占比
适用场景:饼图适合展示一个总量内部的分类构成。示例表示四类访问渠道带来的访问次数:搜索引擎 468、直接访问 286、内容推荐 192、社交媒体 154;使用内外半径可以形成环形饼图。
1 | const channelData = [ |
散点图:广告投入与新增用户
适用场景:散点图适合观察两个数值指标之间可能存在的相关关系。示例中每个点的第一个值为广告投入金额,单位为万元;第二个值为该投入带来的新增用户数,例如 [2, 180] 表示投入 2 万元并获得 180 名新增用户。
1 | const campaignData = [ |
雷达图:产品能力评分
适用场景:雷达图适合比较多个对象在相同评价维度上的表现。示例比较产品 A 与产品 B 在性能、稳定性、易用性、扩展性、服务支持上的百分制评分;产品 A 为 [92, 85, 78, 88, 80],产品 B 为 [82, 91, 89, 73, 87]。
1 | const option = { |
漏斗图:注册转化流程
适用场景:漏斗图适合追踪逐步流失的业务流程。示例描述从访问页面到完成支付的转化过程:访问页面 1000 人、注册账号 620 人、创建订单 360 人、完成支付 218 人。
1 | const funnelData = [ |
仪表盘:CPU 使用率
适用场景:仪表盘适合突出一个需要快速关注的当前状态指标。示例展示服务器当前 CPU 使用率为 67%。
1 | const option = { |
热力图:分时访问热度
适用场景:热力图适合用颜色强度呈现两个分类维度交叉后的数值大小。示例以星期为纵轴、08:00 到 18:00 的时段为横轴;每一个 [时段索引, 星期索引, 热度] 数组表示对应格子的访问热度,例如 [0, 0, 32] 表示周一 08:00 的热度为 32。
1 | const hours = ["08:00", "10:00", "12:00", "14:00", "16:00", "18:00"]; |
组合图:销售额与同比增长率
适用场景:当两个指标共享时间维度但数值单位不同,例如销售额与增长率,可以使用柱状图和折线图搭配双 Y 轴。这里的 dataset 每行分别表示月份、销售额(万元)与同比增长率(百分比)。
1 | const mixedDataset = [ |
真实项目中的数据更新
真实页面通常在组件挂载后请求统计数据。假设初始化 option 已经定义名为 销售额 的柱状系列,下面的方法在接口返回后更新月份类目和对应销售额;可在 onMounted 中完成图表初始化后调用 loadSalesData()。
1 | const loadSalesData = async () => { |
实践中还需要注意以下几点:
- 容器必须有稳定高度;如果父布局在切换侧栏、标签页或弹窗后改变尺寸,也应在可见且尺寸稳定时调用实例的
resize()。 - 只要数据变动,就可以继续调用
setOption合并新配置,无需重复创建实例。 - 异步请求返回后,应先确认组件仍处于挂载状态且图表实例存在;更复杂的场景中,可以在组件卸载时取消尚未完成的请求。
- 真实页面应在接口失败时展示提示或空状态;示例使用
console.error标明错误处理所在位置。 - 更新多个系列时应保留稳定且唯一的
name,或显式使用系列标识,使 ECharts 能够将新数据对应到已有系列。 - 组件卸载时必须移除注册过的窗口监听,并调用
dispose()清理图表实例。
参考文档
- Title: Vue3中使用ECharts创建常用统计图表
- Author: QingchenJia
- Created at : 2026-05-26 10:46:09
- Updated at : 2026-08-04 16:14:38
- Link: https://qingchenjia.github.io/2026/05/26/Vue3中使用ECharts创建常用统计图表/
- License: This work is licensed under CC BY-NC-SA 4.0.