玩转ECharts之实现“动态颜色的Label”
配置项如下
option = {
"backgroundColor": 'rgb(0,0,0)',
"color": ["#1576d2", "#d14a82", "#26c1f2", "#a166ff", "#1271cc", "#272f67", "rgba(156, 43, 182, 1)"],
"series": [{
"radius": ["8%", "10%"],
"data": [{
"value": 1,
"itemStyle": {
"color": "#a0a0a0",
"matchColor": true,
"opacity": 0.3
}
}],
"type": "pie",
"silent": true,
"label": {
"show": false
},
"labelLine": {
"show": false
},
"animation": false
}, {
"type": "pie",
"data": [{
"name": "苹果",
"value": 32,
"_startArc": 0,
"_endArc": 1.6589268137767885,
}, {
"name": "三星",
"value": 26,
"_startArc": 1.6589268137767885,
"_endArc": 3.6911121606533546,
}, {
"name": "华为",
"value": 12,
"_startArc": 3.6911121606533546,
"_endArc": 3.898478012375453,
}, {
"name": "小米",
"value": 26,
"_startArc": 3.898478012375453,
"_endArc": 5.557404826152241,
}, {
"name": "其他",
"value": 3,
"_startArc": 5.557404826152241,
"_endArc": 6.283185307179586,
}],
"radius": ["10%", "35%"],
"label": {
"nameColor": "#CACACA",
"valueColor": "color",
"labelStyle": "style2",
"fontSize": 20,
"formatter": function formatterFunc(params) {
const values = params.data; // 内容
const formatter = [`{rect|}{name|${values.name}} ${values.value}%`, `${values.value}% {name|${values.name}}{rect|}`];
// 这里拿到了开始角度和结束角度,计算了一个label指示线的标注角度
const midAngle = (values._startArc + values._endArc) / 2;
// 分情况判断了一下 决定采用左边的还是右边的
if (midAngle <= Math.PI) {
return formatter[0];
} else {
return formatter[1];
}
},
"rich": {
"name": {
"color": '#fff',
"borderColor": '#264884',
"borderWidth": 1,
"padding": [10, 15],
},
"rect": {
"height": 12,
"width": 8,
"backgroundColor": "#264884"
}
},
"opacity": 1,
"position": "outside",
"matchColor": true,
},
"labelLine": {
"lineStyle": {
"color": "#fff"
}
},
"itemStyle": {
"borderColor": "#000",
"borderWidth": 2
},
"hoverAnimation": false
}]
}