const 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, }, ], };