遇到一个需求,就是如何保证echarts图表里至少显示一个图例的数据(也就是最后一个图例不能变成unselected的状态)
下图是最初加载时的画面
不想出现图例都被点击取消导致图表只有一个坐标轴,太丑了
在发帖前查阅了一些思路:
- 有用单选模式曲线救国的,但是就没有办法看到多条图例的数据在同一个图表里显示
- 有图例为最后一个的时候,禁用所有图例的点击事件
都不是能够很好的解决,找到一个可以参考的代码
var option = {
title: {
text: '折线图堆叠'
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['邮件营销','联盟广告','视频广告','直接访问','搜索引擎']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['周一','周二','周三','周四','周五','周六','周日']
},
yAxis: {
type: 'value'
},
series: [
{
name:'邮件营销',
type:'line',
stack: '总量',
data:[120, 132, 101, 134, 90, 230, 210]
},
{
name:'联盟广告',
type:'line',
stack: '总量',
data:[220, 182, 191, 234, 290, 330, 310]
},
{
name:'视频广告',
type:'line',
stack: '总量',
data:[150, 232, 201, 154, 190, 330, 410]
},
{
name:'直接访问',
type:'line',
stack: '总量',
data:[320, 332, 301, 334, 390, 330, 320]
},
{
name:'搜索引擎',
type:'line',
stack: '总量',
data:[820, 932, 901, 934, 1290, 1330, 1320]
}
]
};
myChart.setOption(option);
myChart.on('legendselectchanged', function (params) {
let option = this.getOption();
let select_key = Object.keys(params.selected);
if (!params.selected[params.name]) {
select_key.map(res => {
option.legend[0].selected[res] = !params.selected[res];
});
} else {
select_key.map(res => {
option.legend[0].selected[res] = false;
});
option.legend[0].selected[params.name] = true;
}
this.setOption(option)
});
输入到http://echarts.baidu.com/exam... 的代码框里可以看到效果,基本上算是手动多选切换成了单选,但是成单选后就无法多选,所以我想问有没有什么方法可以实现需求,或者获取最后一个图例的对象后,只禁用该对象的点击事件
自己解决了,下附解决思路及部分代码。
思路:当选择最后一个图例的时候,将其selected的值改为true就可以了,之前附的参考代码改一改就实现了
代码如下:
完美解决,回头再整理博客