配置项如下
const data = [{
name: '数据1',
value: 36,
rate: 12
},
{
name: '数据2',
value: 20,
rate: 20
},
{
name: '数据3',
value: 16,
rate: -40
},
{
name: '数据4',
value: 10,
rate: -15
},
{
name: '数据5',
value: 9,
rate: 12
},
{
name: '数据6',
value: 9,
rate: -6
}
]
option = {
title: {
text: '{header1| 名称与占比}' +
'{header2| 数量}' +
'{header3| 比例}',
textAlign: 'left',
left: '49%',
top: '30%',
textStyle: {
color: '#ccc',
rich: {
header1: {
width: 130,
fontSize: 15
},
header2: {
width: 85,
fontSize: 15
},
header3: {
fontSize: 15
}
}
}
},
legend: {
// selectedMode: false, // 取消图例上的点击事件
type: 'plain',
icon: 'circle',
orient: 'vertical',
left: '50%',
top: '35%',
align: 'left',
itemGap: 15,
itemWidth: 10, // 设置宽度
itemHeight: 10, // 设置高度
symbolKeepAspect: false,
textStyle: {
color: '#000',
rich: {
name: {
verticalAlign: 'right',
align: 'left',
width: 35,
fontSize: 12
},
value: {
align: 'left',
width: 60,
fontSize: 12
},
count: {
align: 'left',
width: 80,
fontSize: 12
},
upRate: {
align: 'left',
fontSize: 12,
color: '#00cf90'
},
downRate: {
align: 'left',
fontSize: 12,
color: '#ff5722'
}
}
},
data: data.map(item => item.name),
formatter: function(name) {
let className = 'upRate'
let rateIcon = '▲'
if (data && data.length) {
for (var i = 0; i < data.length; i++) {
if (name === data[i].name) {
if (data[i].rate < 0) {
className = 'downRate'
rateIcon = '▼'
}
return (
'{name| ' +
name +
'} | ' +
'{value| ' +
data[i].value +
'%}' +
'{count| ' +
Number(4544).toLocaleString() +
'} ' +
'{' + className + '| ' + rateIcon +
Math.abs(data[i].rate) +
'%}'
)
}
}
}
}
},
series: [{
name: '数量',
type: 'pie',
radius: ['40%', '55%'],
center: ['25%', '50%'],
data: data,
label: {
normal: {
show: false,
position: 'center',
formatter: '{text|{c}}\n{b}',
rich: {
text: {
align: 'center',
verticalAlign: 'middle',
padding: 8,
fontSize: 30
},
value: {
align: 'center',
verticalAlign: 'middle',
fontSize: 20
}
}
},
emphasis: {
show: true,
textStyle: {
fontSize: '12'
}
}
},
labelLine: {
normal: {
show: true
}
}
}]
};