1. 从“图例不显示”说起:一个新手常踩的坑
刚接触Echarts那会儿,我也被图例(legend)不显示的问题折腾得够呛。记得有一次,我吭哧吭哧写了一个漂亮的柱状图,数据、样式都调好了,满心欢喜地准备展示,结果发现右上角那个说明数据系列的小方块——也就是图例——死活不出来。代码看起来明明没问题啊,legend的data数组里明明写了名字,浏览器控制台也没报错,可它就是跟你玩“躲猫猫”。
后来折腾了半天,才发现问题出在一个非常基础但又极其容易忽略的细节上:图例要显示出来,光在legend.data里声明名字是不够的,还必须得在series里找到名字完全一致的“伙伴”。这就像你组织一场聚会,你在宾客名单(legend.data)上写了“张三”,但实际到场的人(series)里必须有一个叫“张三”的,否则这个名字就只是个虚名,无法对应到任何一个真实的人,自然也就无法在聚会上被介绍。
原始文章里那个例子就很典型:
legend: {
data: ['Forest', 'Steppe', 'Desert', 'Wetland']
},
你配置了这个,Echarts就知道:“哦,用户想要展示四个图例项,分别叫森林、草原、沙漠、湿地。”但它会立刻去series数组里挨个检查:“让我看看,有没有一个系列的name叫‘Forest’?有没有叫‘Steppe’的?”如果找不到,它就会认为这个图例项没有对应的数据系列,出于严谨(或者说是为了防止误导),它就不会把这个图例项渲染出来。所以,你必须确保series里每个对象的name属性,都能在legend.data中找到一模一样的字符串。
series: [
{ name: 'Forest', type: 'bar', data: [...] }, // 匹配上了!
{ name: 'Steppe', type: 'bar', data: [...] }, // 匹配上了!
{ name: 'Desert', type: 'bar', data: [...] }, // 匹配上了!
{ name: 'Wetland', type: 'bar', data: [...] } // 匹配上了!
]
这就是Echarts图例显示的核心规则:一一对应,严丝合缝。哪怕一个字母的大小写不同(比如'forest'和'Forest'),或者多了一个空格,都会导致匹配失败。很多新手,包括当年的我,往往只配置了一处,就以为万事大吉,结果在调试时百思不得其解。理解了这个“配对”机制,就相当于拿到了解决大部分图例问题的钥匙。
2. 不仅仅是“不显示”:图例与系列名不匹配的连锁反应
你以为名字对不上,仅仅只是图例不显示那么简单吗?那就想得太简单了。在实际项目中,这种不匹配会引发一系列更隐蔽、更让人头疼的问题,我把它叫做“图例失灵综合征”。
首先,最直接的就是交互失效。 图例的核心功能之一就是点击切换系列(数据线或柱子)的显示与隐藏。如果图例项的名字在series里找不到对应项,你点击这个图例是没有任何反应的。更糟糕的一种情况是,如果你的legend.data里有两个名字,但它们在series里对应的是同一个name(比如两个图例都指向name: '销量'的系列),那么点击其中一个图例,可能会同时控制两个图例的显示状态,或者出现不可预料的行为,这完全破坏了交互的确定性。
其次,动态数据更新会出大问题。 这是很多人在做实时图表或数据看板时踩的“深坑”。比如,你通过setOption动态更新了series的数据,甚至改变了series的name,但却忘了同步更新legend.data

197

被折叠的 条评论
为什么被折叠?



