嘿,朋友!很高兴你能在这里停下脚步。我知道,刚开始接触数据可视化——尤其是像 ECharts 这样功能强大的库时,那种看着一堆代码却不知道从何下手的感觉,就像站在迷宫入口一样迷茫。别担心,我们慢慢来。
今天我不想给你甩一堆枯燥的定义,而是想带你像搭积木一样,一步步把 ECharts “玩”明白。我们会从最基础的引入开始,亲手写出三个最常用的图表:饼图、柱状图和折线图。更重要的是,我会把我踩过的坑、你大概率会遇到的报错,一个个摊开来讲。毕竟,报错不是敌人,它是老师。
准备好了吗?让我们开始这段旅程。
第一步:把 ECharts 请进你的项目
在写第一行配置代码之前,你得先有工具。这就像想画画得先有画笔。目前引入 ECharts 主要有两种姿势,我会告诉你哪种更适合新手。
方式一:CDN 引入(最简单,适合快速上手)
如果你只是想快速演示,或者你的项目是静态 HTML 页面,不需要复杂的构建工具(比如 Webpack、Vite),那直接从 CDN 引入是最快的。
在你的 HTML 文件 <head> 部分加上这一行:
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
注:版本号我写的是 5.4.3,这是截至 2026 年初比较稳定的版本。你可以去 ECharts 官网 查看最新稳定版,换掉这个版本号即可。
方式二:npm 安装(适合正规项目开发)
如果你的项目是用 Vue、React 或 Node.js 搭建的,那用包管理器才是正道。打开你的终端,运行:
npm install echarts
# 或者如果你用 yarn
yarn add echarts
安装完后,在你的 JS 文件里这样引入:
import * as echarts from 'echarts';
我的建议: 刚开始学习,先用 CDN 方式,直接写个 HTML 文件,双击就能在浏览器看效果,反馈最快,挫败感最低。
第二步:认识“骨架”——一个图表长什么样?
不管你是画饼图、柱状图还是折线图,ECharts 的“骨架”都是一样的。你可以把它想象成填表格:
- 容器:一个有宽高的 HTML 元素(通常是
<div>)。 - 初始化:用
echarts.init()把这个 DOM 绑定给 ECharts。 - 配置项(option):这是核心!所有图表的样子、数据、颜色都在这里配置。
- 渲染:调用
setOption()把配置应用上去。
下面这个“万能模板”,请你务必刻在脑子里。以后不管画什么图,都是改这个 option 部分:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个 ECharts</title>
<!-- 引入 ECharts -->
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
</head>
<body>
<!-- 1. 准备一个有明确宽高的容器 -->
<div id="main" style="width: 600px; height: 400px;"></div>
<script>
// 2. 初始化 ECharts 实例
var myChart = echarts.init(document.getElementById('main'));
// 3. 制定配置项(这是后面我们要重点讲的)
var option = {
// ... 配置内容 ...
};
// 4. 渲染图表
myChart.setOption(option);
</script>
</body>
</html>
你看,其实也没那么可怕,对吧?现在,让我们往这个骨架里填入具体的“血肉”。
第三步:绘制第一个图表——饼图(Pie Chart)
饼图是最直观的展示“部分占整体比例”的图表。比如,你想展示一天 24 小时里,睡眠、工作、娱乐各占多少时间。
代码示例
复制下面的代码,保存为 pie.html,用浏览器打开,你会看到一个动态旋转的饼图。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>饼图示例</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 600px; height: 400px;"></div>
<script>
var myChart = echarts.init(document.getElementById('main'));
var option = {
// 标题组件
title: {
text: '我的时间分配',
subtext: '纯属虚构',
left: 'center'
},
// 提示框组件(鼠标悬停时显示的信息)
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
// 图例组件
legend: {
orient: 'vertical',
left: 'left',
data: ['睡眠', '工作', '娱乐', '发呆']
},
// 系列列表
series: [
{
name: '时间占比',
type: 'pie', // 关键:指定为饼图
radius: '50%', // 饼图半径,这里设为容器宽度的一半
data: [
{ value: 1048, name: '睡眠' },
{ value: 735, name: '工作' },
{ value: 580, name: '娱乐' },
{ value: 484, name: '发呆' }
],
// 高亮样式
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
myChart.setOption(option);
</script>
</body>
</html>
关键点解析
type: 'pie':这是饼图的“身份证”,千万别写错。data数组:每一项是一个对象,包含value(数值)和name(名称)。你可以直接写数字,也可以像上面那样写对象,更灵活。radius:控制饼图大小。'50%'是相对于容器短边的半径。如果你想要一个环形图(甜甜圈),可以改成['40%', '70%'],前一个数是内径,后一个数是外径。
第四步:绘制柱状图(Bar Chart)
柱状图适合对比不同类别的数据大小。比如,对比不同手机品牌在某个季度的销量。
代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>柱状图示例</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 600px; height: 400px;"></div>
<script>
var myChart = echarts.init(document.getElementById('main'));
var option = {
title: {
text: '智能手机季度销量对比',
left: 'center'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow' // 阴影指示器
}
},
// 工具箱,让用户可以下载图片、数据视图等
toolbox: {
feature: {
saveAsImage: {},
dataView: {},
restore: {}
}
},
// X 轴
xAxis: {
type: 'category',
data: ['华为', '小米', '苹果', 'OPPO', 'vivo']
},
// Y 轴
yAxis: {
type: 'value'
},
// 系列
series: [
{
name: '销量(万台)',
type: 'bar', // 关键:柱状图
data: [120, 200, 150, 80, 70],
// 让柱子有圆角,看起来更柔和
itemStyle: {
borderRadius: [5, 5, 0, 0]
},
// 柱子上的标签
label: {
show: true,
position: 'top'
}
}
]
};
myChart.setOption(option);
</script>
</body>
</html>
关键点解析
type: 'bar':柱状图的身份证。xAxis和yAxis:xAxis.type: 'category'表示 X 轴是类别轴(文字)。yAxis.type: 'value'表示 Y 轴是数值轴。
series数组:即使只有一组数据,也要放在series数组里。如果你要对比“今年”和“去年”的数据,就在这里再加一个对象,ECharts 会自动并排显示。
第五步:绘制折线图(Line Chart)
折线图最适合展示数据随时间变化的趋势。比如,记录你一周内每天的心率,或者某只股票一个月的价格走势。
代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>折线图示例</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 600px; height: 400px;"></div>
<script>
var myChart = echarts.init(document.getElementById('main'));
var option = {
title: {
text: '一周身高变化(宝宝成长记录)',
left: 'center'
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
// 注意:折线图通常用时间或类别作为 X 轴
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
},
yAxis: {
type: 'value',
name: '身高(cm)'
},
// 网格线,让读数更容易
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
series: [
{
name: '身高',
type: 'line', // 关键:折线图
smooth: true, // 开启平滑曲线,看起来更自然
data: [75, 75.5, 76, 76.2, 76.8, 77, 77.5],
// 填充区域,让趋势更明显
areaStyle: {
opacity: 0.3
},
// 标记点,比如最高点
markPoint: {
data: [
{ type: 'max', name: '最大值' }
]
},
// 标记线,比如平均值
markLine: {
data: [
{ type: 'average', name: '平均值' }
]
}
}
]
};
myChart.setOption(option);
</script>
</body>
</html>
关键点解析
type: 'line':折线图的身份证。smooth: true:让折线变得圆滑,而不是折线。根据数据特性选择,有些数据(如股票)用直线更准确,有些(如温度变化)用曲线更美观。areaStyle:给折线下方填充颜色,视觉上强调“趋势的面积”。markPoint和markLine:这是 ECharts 非常强大的功能,可以自动标记数据的最大值、最小值、平均值等,在分析报表时非常有用。
第六步:常见报错与解决方案——别慌,我帮你
作为新手,你一定会遇到报错。别怕,我们来把最常见的几个“坑”填上。
错误 1:echarts.init(...) is not a function
现象:控制台报错,图表完全不动。
原因:
- 你忘了引入 ECharts 的 JS 文件。
- 引入顺序错了,先执行了
echarts.init,后引入的脚本。 - 你用 npm 安装后,没有正确导入。
解决:
- CDN 方式:确保
<script src="...">在<script>业务代码之前。 - npm 方式:确保
import * as echarts from 'echarts';在第一行,或者在使用前。
错误 2:图表显示空白,或者容器高度为 0
现象:页面没报错,但就是看不到图,只有一个空白的框。
原因:
ECharts 容器必须有明确的宽高。如果你只写了 div,没有设置 style="width: 600px; height: 400px;",或者父容器没有高度,ECharts 就无法计算,导致渲染失败。
解决:
检查你的 CSS。确保容器有 width 和 height。不要用 auto,最好给具体像素值,或者确保父元素有明确高度。
#main {
width: 100%;
height: 400px; /* 必须设置高度 */
}
错误 3:series[i].type is invalid
现象:控制台报错,提示类型无效。
原因:
你在 series 里写错了 type 的值。比如把 'bar' 写成了 'barr',或者把 'line' 写成了 'chart'。ECharts 对类型名称是区分大小写且必须完全匹配的。
解决: 仔细核对文档。常用的类型有:
'bar'(柱状图)'line'(折线图)'pie'(饼图)'scatter'(散点图)'radar'(雷达图)
错误 4:数据不显示,或者显示顺序错乱
现象:图表出来了,但柱子或点的位置不对,或者干脆没数据。
原因:
xAxis.data和series.data的长度不匹配。- 数据结构错了。比如
xAxis.data是数组,但series.data写成了单个数字。
解决:
- 对于柱状图和折线图,确保
xAxis.data的每一项和series.data的每一项是一一对应的。 - 检查
series.data是不是数组。如果是饼图,data是[ {value: 1, name: 'a'}, ... ];如果是柱/折线图,data可以是[1, 2, 3, ...](此时 X 轴会自动生成索引),也可以是[{value: 1, xAxisIndex: 0}, ...](更复杂的场景)。
新手最简单的方式:让 xAxis.data 和 series.data 长度保持一致,按顺序对应。
xAxis: {
data: ['A', 'B', 'C']
},
series: [{
data: [10, 20, 30] // A对应10, B对应20, C对应30
}]
错误 5:中文乱码
现象:标题或标签显示为方块或乱码。
原因: HTML 文件没有声明字符集为 UTF-8。
解决:
在 <head> 里加上:
<meta charset="UTF-8">
第七步:进阶小贴士——让图表更专业
当你把三个基础图表画出来之后,可能会觉得“好像少了点什么”。别急,这里有几个能让你的图表瞬间提升档次的技巧。
1. 响应式布局
你写的 width: 600px 是固定的,如果用户用手机版浏览,图表可能会被挤爆。加上这段代码,让图表自动适应容器大小:
window.addEventListener('resize', function() {
myChart.resize();
});
这行代码的意思是:每当浏览器窗口大小改变时,就重新计算并渲染图表。非常实用!
2. 主题色切换
ECharts 默认配色是蓝色的。但如果你想用“暗黑模式”或者公司品牌色,可以修改 color 数组:
”`javascript option = {
color: ['#5470c6', '#91cc75', '#fac858', '#ee6666'],
//
