问题描述:
当使用echarts柱状图或者柱状堆叠图时,使用对数坐标系引发的纵坐标不从0开始;以及当存在数据为0或1时,柱状图显示异常的相关问题解决。
问题一:当数据中不包含0时,纵坐标不从0展示
问题2:当数据中存在0或者存在1时,数据展示存在问题
解决方案:
第1步:手动修改值为0或值为1的数据,例如:
data.forEach(element1 => {
dataTemp.push(element1 == 0 ? 1.0000001 : (element1 == 1 ? 1.45 : element1));
});
第2步:将y轴最小值1变成从0开始,代码及效果图如下:
yAxis: {
type: 'log',
axisLabel: {
formatter: function (value) {
return value === 1 ? 0 : value;//第2步,将y轴最小值1变成从0开始;
}
}
},
第3步:修改series元素的lable及tooltip(为的是把刚刚改的数据在呈现时改回来),代码及效果如下:
label: {
show: true,
formatter: function (param) {
if (param.data == 0) {
return '';
} else if (param.data == 1.0000001) {
return '';
} else if (param.data == 1.45) {
return 1;
} else {
return param.data;
}
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
formatter: function (params) {
let returnData = params[0].name + '<br/>';
for (let i = 0; i < params.length; i++) {
if (params[i].seriesName != '' && params[i].value != '' && params[i].value > 1.1) {//此处我过滤掉了value为0(也就是1.0000001)的数据
let indexColor = params[i].color;
returnData += '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background:' + indexColor + '"></span>';
if (params[i].value == 1.45) {
returnData += params[i].seriesName + ':1' + '</br>';
} else {
returnData += params[i].seriesName + ':' + (params[i].value) + '</br>';
}
}
}
return returnData;
}
},
至此,针对于柱状图的修复已经完成。
补充:当使用柱状堆叠图时。原理与柱状图相同,只要保证堆叠的第一个数据不是0或1即可,堆叠的数据在中间位置出现0和1不会影响展示。