ECharts 大屏开发复习记录与踩坑总结
整理一下做大屏项目时用到的 ECharts 常用配置、开发技巧和一些踩坑点。这里不追求全面,主要记录实际开发里高频出现、也确实容易写乱的部分。
1. 初始化、容器和自适应
初始化过程:
- 准备容器
echarts.init(dom)chart.setOption(option)
页面尺寸会变化,就补:
1 | window.addEventListener('resize', () => chart.resize()) |
另外一个实际开发里经常踩的点是 setOption 的合并策略。默认是合并更新,所以如果图表结构变了,只是局部传一段配置,很容易把旧系列、旧 legend 或旧坐标轴残留在页面上。
这种情况一般直接考虑:
1 | chart.setOption(option, { notMerge: true }) |
或者:
1 | chart.setOption(option, { replaceMerge: ['series'] }) |
最简单的 index 示例大概这样:
1 |
|
2. 折线图、柱状图、饼图
2.1 折线图
type: 'line'
折线图常用配置:
smooth- 作用:是否平滑曲线
- 常见值:
true/false - 默认值:
false
areaStyle- 作用:给折线下方补面积
- 常见值:对象 /
{}/ 配合渐变色
markPoint- 作用:标注特殊点,比如最大值、最小值
markLine- 作用:标注参考线,比如平均线、预警线
一个常见的平滑面积图配置大概这样:
1 | series: [ |
示例图:

2.2 柱状图
type: 'bar'
柱状图常见配置:
stack- 作用:堆叠同组系列
- 常见写法:多个系列写同一个字符串,比如
stack: 'total' - 说明:这个值不是固定枚举,只要名字相同就会堆叠
barWidth- 作用:控制柱子宽度,可以是绝对值例如
40或者百分数例如'60%'。不设时自适应。
- 作用:控制柱子宽度,可以是绝对值例如
itemStyle.borderRadius- 作用:控制柱子圆角
- 常见写法:
[6, 6, 0, 0]
yAxisIndex- 作用:指定系列使用第几个 Y 轴,从
0开始。 - 常见值:
0/1
- 作用:指定系列使用第几个 Y 轴,从
一个常见的堆叠柱图 + 折线混合配置大概这样:
1 | option = { |
示例图:

2.3 饼图
type: 'pie'
饼图常用配置:
radius- 作用:控制饼图半径
- 常见值:
- 单个值,比如
'60%',表示普通饼图 - 数组,比如
['40%', '70%'],表示环形图
- 单个值,比如
center- 作用:控制饼图在容器里的位置
label- 作用:控制扇区文字
labelLine- 作用:控制引导线
roseType- 作用:切换玫瑰图模式
- 常见值:
'radius''area'
嵌套饼图适合表达总分关系或者层级关系。比如:
- 内圈放大类
- 外圈放子类
一个嵌套饼图的基本写法大概这样:
1 | option = { |
示例图:

3. 图例
图例基础用法不复杂,但大屏里经常不只是显示名字,还要承担:对齐信息、展示占比、展示数值和充当信息面板的作用。
所以这里高频配置一般是:
legend.orient- 作用:控制排列方向
- 常见值:
'horizontal':水平'vertical':垂直
legend.type- 作用:控制普通图例还是滚动图例
- 常见值:
'plain''scroll'
legend.icon- 作用:控制图例图标形状
- 常见值:
'circle'、'rect'、'roundRect'、'triangle'、'diamond'、'pin'、'arrow'、'none' - 也可以直接写自定义
path://...
legend.itemWidth、legend.itemHeight- 作用:图例图标宽度、高度
legend.itemGap- 作用:图例每一项之间的间距
legend.width- 作用:控制图例整体宽度,富文本内容多的时候比较常用
legend.formatter- 作用:自定义图例显示内容
富文本图例的典型写法大概这样:
1 | legend: { |
示例图:

4. 常见问题
4.1 正负条形图怎么让 0 轴居中
有几种做法:
- 单轴对称:代码简单,思路直观
- 双 grid:空间利用率更高,尤其适合两边数值量级差很大的场景
单轴对称思路:先取左右两边绝对值的最大值,再让 min 和 max 以这个值对称展开,这样 0 轴自然就被推到中间了。
核心其实就这一段:
1 | xAxis: { |
如果更在意空间利用率,就拆双 grid,让左右两边各自拥有独立刻度。核心配置大概这样:
1 | // 注意这个 grid |
这套方案的核心不是把一组数据转成负值,而是把左右两边拆成两个坐标区域,各自画、各自算。
示例图:

4.2 graphic 是干嘛的
graphic 不是图表系列本身,它更像是在图表上层额外画一层辅助元素。比较常见的用法有:中心文字、装饰元素和信息补充。
比如饼图中间那种总数、标题、说明文字,就很适合用 graphic 去放:
1 | graphic: [ |
如果写了 graphic 却感觉“加了和没加一样”,一般也就两种情况:
-
没显示出来
-
被别的图形盖住了
示例图:

4.3 渐变色怎么用,方向参数怎么理解
ECharts 里常用的就是两种渐变:LinearGradient(线性渐变)、RadialGradient(径向渐变)。
先看线性渐变的参数:
1 | new echarts.graphic.LinearGradient(x0, y0, x1, y1, colorStops) |
这 4 个坐标用的是 0 到 1 的相对比例,不是具体像素。
x0, y0:渐变起点的 x、y 坐标,定义“从哪里开始”x1, y1:渐变终点的 x、y 坐标,定义“往哪里结束”
注意:这里的坐标系可以直接按浏览器二维坐标系理解,原点在左上角,x 往右是正方向,y 往下是正方向。
比如:
(0, 0, 0, 1):起点在上方,终点在下方(0, 0, 1, 0):起点在左侧,终点在右侧
几个常见的方向参数:
(0, 0, 0, 1):从上到下(0, 0, 1, 0):从左到右(0, 0, 1, 1):左上到右下(1, 0, 0, 1):右上到左下
径向渐变的参数是:
1 | new echarts.graphic.RadialGradient(cx, cy, r, colorStops) |
cx、cy:表示圆心位置r:表示扩散半径
一般 0.5, 0.5, 0.8 这种写法比较常见,也就是高光在中间,再向四周扩散。
柱图、面积图、饼图里常见的写法分别是:
1 | // 柱图:上实下虚 |
示例图:

5. 总结
这篇主要就是把常用配置、常见图表套路和几个开发里容易碰到的问题收一遍,方便后面继续做图或者查配置的时候直接回来翻。
参考
本文经 AI 润色。