用 ECharts 把数据画出来——折线、柱状、饼图一文上手

举报
茉莉风铃 发表于 2026/09/22 14:08:01 2026/09/22
【摘要】 前端要把后端吐出来的数字变成一眼能看懂的图,ECharts 几乎是绕不开的工具。本文从"为什么要用图表库"讲起,手把手带你用 CDN 接入 ECharts,逐个实现折线图、柱状图、饼图,并附上一份常用配置速查表,复制改改就能用到项目里。

后端给到前端的往往是一串 JSON:[{date:'08-01', uv:1200}, ...]。直接塞进表格用户根本看不出趋势。把数字变成图,是人类大脑最快理解信息的方式。ECharts 是百度开源、现在由 Apache 孵化的图表库,几乎覆盖你能想到的所有图形,而且 API 统一、文档全中文,入门特别顺。

为什么不直接用 CSS 手画?柱状图还好说,div 高度调一调能凑合;但折线、饼图、带 tooltip 的交互、图例联动,自己写成本太高,而且各种浏览器兼容坑能让你怀疑人生。用 ECharts,核心就一个方法:setOption,把"数据 + 配置"喂进去,图就出来了。

一、5 分钟接入

最简单的方式是 CDN 引入,省去打包配置,适合快速验证:

<!-- 准备一个带宽高的容器,ECharts 会往里画 -->
<div id="chart" style="width: 600px; height: 400px;"></div>
<script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
<script>
  // 1. 基于dom初始化
  const chart = echarts.init(document.getElementById('chart'));
  // 2. 配置项
  const option = { /* 后面填 */ };
  // 3. 渲染
  chart.setOption(option);
</script>

在 Vue/React 项目里也类似,区别只是把 init 放在 mounted/useEffect 里,并在组件销毁时调 chart.dispose() 释放,否则切页面会内存泄漏。另外记得监听窗口缩放:window.addEventListener('resize', () => chart.resize()),否则图表不会跟着容器自适应。

二、折线图:看趋势

折线图最适合表现"随时间变化"。比如一周的访问量:

chart.setOption({
  title: { text: '近 7 天 UV 趋势' },
  tooltip: { trigger: 'axis' },          // 鼠标移上去显示整条线的值
  xAxis: { type: 'category', data: ['周一','周二','周三','周四','周五','周六','周日'] },
  yAxis: { type: 'value' },
  series: [{
    name: 'UV',
    type: 'line',                         // 图形类型:line
    smooth: true,                         // 曲线平滑
    data: [1200, 1320, 1100, 1450, 1600, 2100, 1980]
  }]
});

tooltip.trigger: 'axis' 是折线图常用的配置,鼠标在图上移动会弹出该 x 位置所有系列的值,比默认好用太多。

三、柱状图:做对比

柱状图强调"类别之间的差别"。比如各端设备的访问占比对比:

chart.setOption({
  title: { text: '各端访问量对比' },
  tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
  xAxis: { type: 'category', data: ['PC','移动端','小程序','Pad'] },
  yAxis: { type: 'value' },
  series: [{
    name: ' visits',
    type: 'bar',                          // 图形类型:bar
    data: [3200, 8900, 5400, 1200],
    itemStyle: { color: '#5470c6' }
  }]
});

柱状图想表现"正负"或"多系列分组"也很方便,加多个 series 就会自动并排显示。

四、饼图:看占比

占比类问题(比如流量来源构成)用饼图最直观:

chart.setOption({
  title: { text: '流量来源占比' },
  tooltip: { trigger: 'item', formatter: '{b}: {d}%' },  // {d} 是百分比
  legend: { bottom: 0 },
  series: [{
    type: 'pie',
    radius: '55%',
    data: [
      { name: '直接访问', value: 335 },
      { name: '搜索引擎', value: 1548 },
      { name: '社交媒体', value: 810 },
      { name: '其他', value: 235 }
    ]
  }]
});

formatter: '{b}: {d}%' 让 tooltip 直接显示"名称: 百分比",比默认只显示数值友好。

五、常用配置速查表

配置项 作用 常见取值
title 标题 { text: 'xxx' }
tooltip 悬浮提示 trigger: 'axis' / 'item'
legend 图例 { data: [...] }
xAxis 横轴 type: 'category' / 'value'
yAxis 纵轴 type: 'value'
series[].type 图形类型 line / bar / pie
series[].data 数据 数组
color 调色板 颜色数组

记住一个规律:轴类(折线/柱状)用 category 横轴 + value 纵轴,饼图不用轴、直接给 data 数组。搞清这个,三种图随时切换。

六、数据从哪来

真实项目里,option.series[0].data 不是手写的,而是从接口拿:

fetch('/api/uv-trend')
  .then(res => res.json())
  .then(json => {
    chart.setOption({
      xAxis: { data: json.map(i => i.date) },
      series: [{ data: json.map(i => i.uv) }]
    });
  });

拿到数据后只更新 series.data 和 xAxis.data,ECharts 会平滑重绘,不用动其他配置。

小结

ECharts 的核心就是"初始化 → setOption(数据+配置) → 销毁/resize"。折线看趋势、柱状做对比、饼图看占比,三种图覆盖了日常 80% 的需求。剩下的环形图、散点图、地图,无非是换 series.type 加几个配置项,套路完全一致。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。