图例要显示A、B、C,图表里要显示1、2、3,那我可以把对应项的名称定义为1、2、3,利用 legend 的 formatter里面可以取到对应1、2、3的名称,然后判断一下返回A、B、C。本质上是以图表为基准,修改图例的显示。修改legend的可选择性就比较少,它只能返回当前 name 。
示例代码
<script src="https://cdn.bootcss.com/echarts/4.0.4/echarts.js"></script>
<div id="main" style="width: 600px;height:400px;"></div>
<script>
$(function () {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
//先定义好数据,方便下面修改时可以遍历
var dataSet = [
{
value: 500,
name: '1',
itemStyle: {
color: '#2756c2' //这里可以设置颜色
}
},
{
value: 800,
name: '2',
itemStyle: {
color: '#2ec23a'
}
},
{
value: 200,
name: '3',
itemStyle: {
color: '#c2220a'
}
}
];
var option = {
title: {
text: '某站点用户访问来源',
subtext: '纯属虚构',
x: 'center'
},
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
legend: {
orient: 'vertical',
left: 'left',
data: ['1', '2', '3'],
formatter: function (name) {
var total = 0;
var target;
//这里就需要先遍历数据项,取出当前的项,再格式化返回
//这里可以计算百分比
/* for (var i = 0, l = dataSet.length; i < l; i++) {
total += dataSet[i].value;
//判断name相等的则为当前项
if (dataSet[i].name == name) {
target = dataSet[i].value;
}
}*/
if(name == 1){
return 'A'
}
if(name == 2){
return 'B'
}
if(name == 3){
return 'C'
}
//这里可以计算百分比
//return name + ' ' + ((target / total) * 100).toFixed(2) + '%';
}
},
series: [
{
name: '访问来源',
type: 'pie',
radius: ['50%', '70%'],
avoidLabelOverlap: false,
label: {
normal: {
show: true, //展示
position: 'outside', // outside表示文本显示位置为外部
},
emphasis: {
show: true,
textStyle: {
fontSize: '30',
fontWeight: 'bold'
}
},
},
labelLine: {
normal: {
show: true
}
},
data: dataSet,
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
});
</script>