← 返回目录

8. ECharts 数据可视化与引入

把这页想成"把数字画成图":一堆干巴巴的数字,ECharts 能把它变成好看的柱状图 / 折线图 / 饼图。你不用自己画坐标、画柱子,只要把数据填进一个叫 option 的配置对象里,剩下的它全包了。固定流程五步:引 CDN → 给容器 → echarts.init → 写 option → setOption

8.1 内置演示:柱 / 线 / 饼一键切换

同一份数据,换 option 里 type 字段就能换图形 —— 这就是"配置项驱动"。

上面三张图用的是同一份数据,只是把配置里 series.type"bar" 改成 "line""pie",图就变了。这就是 ECharts 的核心思想——配置项驱动,图长什么样全看你 option 怎么写。点"随机换数据"感受一下"改数据后重新 setOption"。

8.2 知识点讲解

① 四步接入法(必背,顺序不能错)

1. 引入 < script src = "https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js" > < /script>  → 第一步:把 ECharts 库引进来
// ★ 必须是完整 URL;放最前面,否则后面会报 echarts is not defined → 引晚了,后面用 echarts 时它还不存在
2. 容器 < div id = "chart"
style = "width:100%; height:400px;" > < /div>  → 第二步:给一个空 div 当图的窝
// ★ 容器必须【既有宽又有高】,否则图表渲染成一片空白 → 没高度,图就画不出来
3. 初始化 → 第三步:在这个窝上初始化
let chart = echarts.init(document.getElementById("chart"));  // 把图画进这个容器
// 每个容器只 init 一次;重复 init 会告警还白占内存 → 别反复 init
4. 渲染 chart.setOption({ ... }); // 把配置项传进去,图立刻出来 → 第四步:把数据和样式塞进去,图就出来

两个入门最高频的报错:① 容器没写 height → 图表一片空白;② CDN 没加载成功 → 控制台报 echarts is not defined排查顺序永远是:先看 Network 里 echarts.js 是不是 200 加载成功,再看容器是不是有明确高度。

② option 里最常用的 6 个配置

配置作用示例
title图表标题
{ text: "标题", left: "center" } // 图最顶上的标题,居中
tooltip鼠标悬停提示
tooltip: { trigger: "axis" } // 鼠标放上去时弹提示框
legend图例(有多条系列时必须有)
legend: { data: ["A", "B"] } // 图例:说明每种颜色代表哪条线
xAxis / yAxis坐标轴:类目轴 / 数值轴
{ type: "category" }   // X 轴:类目轴(放部门名这种文字)
/ { type: "value" }      // Y 轴:数值轴(放销售额这种数字)
series图形本体:type + data
{ type: "bar", data: [...] } // 图的本体:画什么形状 + 用哪些数
color配色数组
color: ["#5470c6", "#ee6666"] // 图用哪几种颜色

不用全背,常用就这几个:series 是图的"本体"(决定画什么、数据是啥),xAxis/yAxis 是坐标轴,tooltip/legend 是交互辅助。先跑通最小的 bar 图,再一个个往上加。

③ 三种常用图形怎么切?只改 type(注意饼图数据格式不一样)

// 柱状图、折线图:data 就是纯数字数组 → 柱和线的数据就是一串数
{ type: "bar", data: [82, 120, 96] } // 柱状图:比大小 → 画成一根根柱子比高低
{ type: "line", data: [82, 120, 96] } // 折线图:看趋势 → 画成连线看升降

// 饼图:data 必须是 { name, value } 对象数组!→ 饼图格式不一样,每块要带个名字
{
  type: "pie",                       // 画成饼图
  data: [                            // 注意:不是纯数字,是 {名字, 数值} 一对一对
    { name: "技术部", value: 82 },   // 每一块:叫啥名、占多少
    { name: "市场部", value: 120 }
  ]
}

唯一要记的坑:饼图的 data 格式和柱/线不一样。柱/线是纯数字数组,饼图必须是 { name, value } 对象数组(因为饼图要显示每块叫啥名)。切饼图时还要把 xAxis/yAxis 注释掉,否则显示会异常。

④ 动态更新与自适应(做"实时看板"必备)

// 动态更新:改完数据重新 setOption,它只重画变化的部分 → 数据变了就重画一遍
setInterval(function () {           // 每 2 秒自动跑一次
  option.series[0].data = [Math.random * 100, ...];  // 换一批随机新数据
  chart.setOption(option); // ★ 同一个实例反复 setOption 即可 → 还是那张图,刷新数据
}, 2000);

// 自适应:窗口大小变了,图要跟着缩放 → 浏览器窗口拉大拉小,图也得跟着变
window.addEventListener("resize", function () {
  chart.resize();                    // 让图重新适配大小
});

// 销毁:离开页面时释放内存 → 不用了就把图销毁,别白占内存
chart.dispose();

做实时数据看板(比如每秒刷新的监控图)就靠 setInterval + 重新 setOption。另外窗口拉宽拉窄时,记得监听 resize 调一下 chart.resize,否则图不会跟着变。

8.3 实战:用在哪 / 常见坑 / 怎么解决

① 可能在什么地方用:后台数据看板(销售额柱状图)、运营报表(趋势折线图)、占比分析(饼图)、大屏可视化——凡是"把数据变成图给领导看"的场景都是 ECharts。

② 常见的问题:图一片空白(容器没 height);报 echarts is not defined(CDN 没加载成功或放错位置);饼图画不出来(data 没用 {name,value} 对象数组);窗口缩放后图变形(忘了监听 resize);重复 echarts.init 导致告警。

③ 解决思路:空白就先给容器写死一个 height:400px 测试;报错就看 Network 里 echarts.js 加载成功没;饼图不对就检查 data 格式;变形就加 chart.resize。记住最小四步:引 CDN → 给容器宽高 → echarts.initsetOption

一句话:引 CDN、给容器宽高、echarts.init 一次、setOption 渲染;改数据就重新 setOption,切图形就改 series.type;记住"容器必须有高度"和"CDN 必须先于使用"。