ECharts图表插件免费下载 完整安装教程常见报错问题解决方法及新手入门指南
我猜你现在正盯着电脑屏幕发愁,想做一个漂亮的图表,但不知道从哪里下手对吧?别急,ECharts其实比你想的简单得多。我见过太多人一开始被各种配置项吓到,但其实只要你理解核心逻辑,图表这件事真的就是”搭积木”——先把框架立起来,再往里面填东西。
一、先认识一下ECharts是个什么玩意儿
ECharts是百度开源的一个基于JavaScript的图表库,专门用来做各种可视化图表。它的官网长这样:https://echarts.apache.org/,你可以去逛逛,里面已经有很多现成的例子。
说实话,我第一次用它的时候,以为要下载一堆东西、配一堆环境,结果发现——就一个JS文件的事儿。这就是为什么新手容易被吓退,其实门槛比想象中低太多了。
它支持:
- 折线图、柱状图、饼图
- 散点图、雷达图
- 地图、热力图
- 桑基图、关系图
- 甚至3D地球
基本上你需要用的图表类型,它都有。
二、免费下载和安装ECharts
这里有几种方式,从最简单到最完整,我给你一一列出来,你选适合你的:
方法一:CDN引入(最推荐新手,5分钟搞定)
你只需要在HTML文件里加一行代码,不用下载安装任何东西:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ECharts入门</title>
<!-- 直接引入CDN,不用下载任何东西 -->
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
</head>
<body>
<!-- 图表容器,必须给宽高 -->
<div id="main" style="width: 800px; height: 500px;"></div>
<script>
// 初始化图表
var myChart = echarts.init(document.getElementById('main'));
// 配置项
var option = {
title: { text: '这是我的第一个图表' },
tooltip: {},
xAxis: { data: ['衬衫', '裤子', '袜子', '外套', '帽子'] },
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10]
}]
};
// 渲染图表
myChart.setOption(option);
</script>
</body>
</html>
打开浏览器一看,你的第一个柱状图就出来了。 就是这么简单。
小提示:这个CDN链接里的版本号
5.4.3可以随时更新到最新版,去官网查一下最新稳定版就行。
方法二:npm下载安装(适合项目里用)
如果你在做Vue、React或者Node.js项目,用npm装更方便:
# 进入你的项目目录
cd my-project
# 安装ECharts
npm install echarts --save
安装完成后,在JS文件里这样用:
// 引入ECharts
import * as echarts from 'echarts';
// 或者按需引入(只引入你需要的模块,包更小)
import * as echarts from 'echarts/core';
import { BarChart } from 'echarts/charts';
import { GridComponent } from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';
// 注册必须的组件
echarts.use([BarChart, GridComponent, CanvasRenderer]);
// 初始化图表
const chart = echarts.init(document.getElementById('main'));
为什么推荐按需引入? 因为完整版的echarts有800KB+,但按需引入可能只有几十KB,对页面加载速度影响很小。
方法三:下载完整版离线包(适合断网环境)
如果你们公司网络受限,或者你希望完全离线使用:
- 去官网下载页:https://echarts.apache.org/zh/download.html
- 选择”完整版”下载
- 解压后把
echarts.min.js文件复制到你的项目里 - 用
<script src="./echarts.min.js"></script>引入即可
下载文件大小约1.5MB,虽然不小,但胜在离线可用,不怕网络波动。
三、从零开始画第一个完整图表
上面的例子太简单了,我来带你做一个稍微”真实”一点的图表——一个带交互、带提示、带图例的混合图表。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>ECharts混合图表示例</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
<style>
body {
background: #f5f5f5;
padding: 20px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}
.container {
max-width: 900px;
margin: 0 auto;
background: white;
border-radius: 12px;
padding: 24px;
box-shadow: 0 2px 12px rgba(0,0,0,0.08);
}
h2 {
margin-bottom: 20px;
color: #333;
}
#chart {
width: 100%;
height: 450px;
}
</style>
</head>
<body>
<div class="container">
<h2>📊 2024年季度销售数据</h2>
<div id="chart"></div>
</div>
<script>
// 获取图表容器
const chartDom = document.getElementById('chart');
// 初始化实例
const myChart = echarts.init(chartDom);
// 配置项
const option = {
// 标题
title: {
text: '各产品线季度销售额(万元)',
subtext: '数据来源于公司内部统计',
left: 'center',
textStyle: { fontSize: 18, fontWeight: 'bold' },
subtextStyle: { color: '#999', fontSize: 12 }
},
// 提示框,鼠标悬停时显示详细信息
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: { color: '#999' }
},
backgroundColor: 'rgba(255,255,255,0.95)',
borderColor: '#ddd',
borderWidth: 1,
textStyle: { color: '#333' },
// 自定义提示内容
formatter: function(params) {
let html = `<div style="font-weight:bold;margin-bottom:5px;">${params[0].axisValue}</div>`;
params.forEach(item => {
html += `<div style="display:flex;align-items:center;margin:3px 0;">
<span style="display:inline-block;width:10px;height:10px;border-radius:50%;background:${item.color};margin-right:8px;"></span>
<span>${item.seriesName}:</span>
<span style="font-weight:bold;margin-left:auto;">${item.value} 万元</span>
</div>`;
});
return html;
}
},
// 图例,点击可切换显示/隐藏
legend: {
bottom: 10,
data: ['电子产品', '服装', '食品']
},
// X轴
xAxis: {
type: 'category',
data: ['Q1', 'Q2', 'Q3', 'Q4'],
axisTick: { show: false },
axisLine: { lineStyle: { color: '#ccc' } },
axisLabel: { color: '#666', fontSize: 14 }
},
// Y轴
yAxis: {
type: 'value',
name: '销售额(万元)',
nameTextStyle: { color: '#999', padding: [0, 0, 0, 50] },
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f0f0', type: 'dashed' } },
axisLabel: { color: '#666' }
},
// 数据系列
series: [
{
name: '电子产品',
type: 'bar',
data: [320, 332, 401, 434],
itemStyle: { color: '#5470c6', borderRadius: [4, 4, 0, 0] },
barWidth: '40%'
},
{
name: '服装',
type: 'bar',
data: [220, 182, 191, 234],
itemStyle: { color: '#91cc75', borderRadius: [4, 4, 0, 0] },
barWidth: '40%'
},
{
name: '食品',
type: 'bar',
data: [150, 212, 201, 154],
itemStyle: { color: '#fac858', borderRadius: [4, 4, 0, 0] },
barWidth: '40%'
}
],
// 网格配置,控制图表区域大小
grid: {
left: '3%',
right: '4%',
bottom: '15%',
containLabel: true
}
};
// 渲染图表
myChart.setOption(option);
// 窗口大小改变时,自动重新调整图表尺寸
window.addEventListener('resize', function() {
myChart.resize();
});
</script>
</body>
</html>
把上面的代码保存为
index.html,双击打开,你就会看到一个带图例、可悬停提示、响应式的完整图表了。这一步很重要,跑通之后你心里就有底了。
四、常见报错问题和解决方法
这部分是很多人遇到坑的地方,我按”报错频率”从高到低排,你照着对号入座就行。
报错1:图表不显示,页面一片空白
原因大概率是这几个:
① 容器没有设置宽高
ECharts需要一个明确有宽高的DOM容器,否则它不知道该画多大:
<!-- ❌ 错误写法,没有宽高 -->
<div id="chart"></div>
<!-- ✅ 正确写法 -->
<div id="chart" style="width: 600px; height: 400px;"></div>
② 图表容器在不可见区域初始化
比如你在Tab页面里,图表容器一开始是display: none,这时候初始化高度为0,后面切换过来也不会自动撑开:
// 解决方案:在容器变为可见后手动resize
myChart.resize();
或者更好的做法是监听窗口resize事件(上面示例代码里已经有了)。
③ CDN链接失效或网络不通
检查一下浏览器控制台(F12 → Console),如果看到红色报错类似:
Failed to load resource: net::ERR_CONNECTION_REFUSED
说明CDN连不上,换成国内镜像源试试:
<!-- 国内镜像,速度更快 -->
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.3/echarts.min.js"></script>
报错2:echarts is not defined
这说明ECharts没有被正确引入。检查顺序:
1. 检查script标签是否在图表代码之前加载
2. 检查路径是否正确
3. 打开浏览器控制台,看有没有加载失败的红字
<!-- ✅ 正确的顺序 -->
<script src="echarts.min.js"></script>
<script>
// 这里才能用echarts
var chart = echarts.init(document.getElementById('main'));
</script>
<!-- ❌ 错误,echarts还没加载就用 -->
<script>
var chart = echarts.init(document.getElementById('main')); // 报错!
</script>
<script src="echarts.min.js"></script>
报错3:图表显示乱码或中文显示为方框
通常是字体问题。在页面头部加上中文支持:
<meta charset="UTF-8">
如果还不行,可能是字体渲染问题,给图表容器加上字体:
#chart {
font-family: "Microsoft YaHei", "PingFang SC", sans-serif;
}
报错4:Cannot read property 'init' of undefined
这个错的意思是——ECharts没有被正确加载,echarts变量是undefined。根本原因和报错2一样,就是引入方式有问题。
排查步骤:
- 打开浏览器控制台,输入
echarts回车 - 如果返回
undefined,说明没引入成功 - 检查CDN链接是否还能访问
- 换个CDN源试试
报错5:数据不更新,图表卡住不动
当你通过接口获取新数据后,setOption没有正确触发刷新。常见写法:
// ✅ 正确做法
fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => {
myChart.setOption({
series: [{ data: data.values }]
});
});
// ❌ 错误做法,没有await或没处理异步
let data = fetch('https://api.example.com/data'); // 这是Promise,不是数据
myChart.setOption({ series: [{ data: data }] }); // 永远显示空的
报错6:ECharts版本和示例代码不匹配
ECharts 4和ECharts 5在部分API上有变化,比如:
- 5.x版本默认使用Canvas渲染,不再需要单独引入
canvasRenderer - 部分配置项名称有调整
建议: 直接去官方实例库找和你版本对应的示例,不要直接复制老教程里的代码。
五、进阶:让图表更”好看”
基础图表画出来只是第一步,接下来才是”灵魂”部分。
5.1 渐变色和阴影
series: [{
type: 'line',
data: [120, 132, 101, 134, 90, 230, 210],
// 线条渐变色
lineStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: '#5470c6' },
{ offset: 1, color: '#91cc75' }
])
},
// 区域填充渐变色
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: 'rgba(84, 112, 198, 0.5)' },
{ offset: 1, color: 'rgba(84, 112, 198, 0.05)' }
])
}
}]
5.2 自定义主题颜色
ECharts内置了几套主题,也可以自定义:
// 使用内置暗色主题
const chart = echarts.init(document.getElementById('main'), 'dark');
// 或者自定义主题
const myTheme = {
color: ['#5470c6', '#91cc75', '#fac858', '#ee6666'],
backgroundColor: '#fafafa',
textStyle: { fontFamily: 'Arial, sans-serif' }
};
const chart = echarts.init(document.getElementById('main'), myTheme);
六、不同框架里的用法
6.1 Vue 3中使用ECharts
<template>
<div ref="chartRef" style="width: 100%; height: 400px;"></div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import * as echarts from 'echarts'
const chartRef = ref(null)
let myChart = null
onMounted(() => {
myChart = echarts.init(chartRef.value)
myChart.setOption({
xAxis: { type: 'category', data: ['A', 'B', 'C', 'D'] },
yAxis: { type: 'value' },
series: [{ data: [10, 20, 15, 30], type: 'bar' }]
})
// 监听窗口大小变化
window.addEventListener('resize', () => myChart.resize())
})
onUnmounted(() => {
myChart.dispose() // 组件销毁时释放资源,很重要!
window.removeEventListener('resize', () => myChart.resize())
})
</script>
6.2 React中使用ECharts
import { useEffect, useRef } from 'react';
import * as echarts from 'echarts';
function EChartsDemo() {
const chartRef = useRef(null);
useEffect(() => {
const myChart = echarts.init(chartRef.current);
myChart.setOption({
xAxis: { type: 'category', data: ['一月', '二月', '三月'] },
yAxis: { type: 'value' },
series: [{ data: [820, 932, 901], type: 'line' }]
});
const handleResize = () => myChart.resize();
window.addEventListener('resize', handleResize);
// 组件卸载时清理
return () => {
myChart.dispose();
window.removeEventListener('resize', handleResize);
};
}, []);
return <div ref={chartRef} style={{ width: '100%', height: '400px' }} />;
}
七、新手最容易踩的3个坑
坑1:不把图表放到有明确尺寸的元素里
很多新手把div宽度设成100%,但父容器也没有明确宽度,结果图表高度变0,完全看不见。
解决方案: 确保从最外层到图表容器,每一层都有明确的宽度或高度。
坑2:忘记在组件销毁时调用dispose()
ECharts实例会注册全局事件,不手动释放会导致内存泄漏。记住这一条就够了:
// 组件卸载时
myChart.dispose(); // 彻底销毁实例
// 而不是 myChart.clear(); // 只是清空数据,实例还在
坑3:直接复制官网示例代码,不修改就运行
官网示例很多依赖特定的数据格式或额外组件(比如地图需要单独引入map数据)。如果直接复制粘贴发现报错,先看控制台,再看官方文档里这个示例是否依赖了额外的包。
八、一个完整的实战项目:销售数据大屏
最后给你看一个稍微有点”仪式感”的完整项目结构,帮你把前面所有知识点串起来:
my-dashboard/
├── index.html # 主页面
├── css/
│ └── style.css # 样式文件
├── js/
│ ├── charts/
│ │ ├── barChart.js # 柱状图组件
│ │ ├── lineChart.js # 折线图组件
│ │ └── pieChart.js # 饼图组件
│ └── main.js # 入口文件
└── data/
└── mock.json # 模拟数据
main.js 核心逻辑:
// 模拟异步获取数据
async function fetchData() {
const res = await fetch('./data/mock.json');
return res.json();
}
// 初始化所有图表
async function initDashboard() {
const data = await fetchData();
// 柱状图
const barChart = echarts.init(document.getElementById('barChart'));
barChart.setOption({
title: { text: '月度销售趋势', left: 'center' },
tooltip: { trigger: 'axis' },
xAxis: { type: 'category', data: data.months },
yAxis: { type: 'value' },
series: [{
data: data.sales,
type: 'bar',
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#83bff6' },
{ offset: 0.5, color: '#188df0' },
{ offset: 1, color: '#188df0' }
])
}
}]
});
// 饼图
const pieChart = echarts.init(document.getElementById('pieChart'));
pieChart.setOption({
title: { text: '产品占比', left: 'center', textStyle: { fontSize: 14 } },
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
legend: { bottom: 0, type: 'scroll' },
series: [{
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
itemStyle: { borderRadius: 10, borderColor: '#fff', borderWidth: 2 },
label: { show: false, position: 'center' },
emphasis: { label: { show: true, fontSize: 16, fontWeight: 'bold' } },
data: data.products
}]
});
// 统一监听resize
window.addEventListener('resize', () => {
barChart.resize();
pieChart.resize();
});
}
// 页面加载完成后启动
document.addEventListener('DOMContentLoaded', initDashboard);
写在最后
ECharts的学习曲线其实很平滑,难点不在于”怎么画一个图”,而在于配置项太多,不知道怎么组合。我的建议是:
- 先跑通一个最简单的例子(就上面那个柱状图)
- 然后去官方实例库找和你需求类似的图,直接复制过来改数据
- 遇到报错看控制台,90%的错误控制台里都写得很清楚
- 不要死记配置项,会用
Ctrl+F在官方文档里搜关键词
你现在就可以打开一个空白HTML文件,把最开始的示例代码粘进去,双击打开——你的第一个ECharts图表就已经跑起来了。剩下所有复杂的图表,本质上都是这个样子的”套娃”,只不过配置项多了一些而已。
有什么具体问题随时来问,祝你画图愉快。
