配置项如下
let roseData = [
{value: 40, name: 'rose 1'},
{value: 33, name: 'rose 2'},
{value: 28, name: 'rose 3'},
{value: 22, name: 'rose 4'},
{value: 20, name: 'rose 5'},
{value: 15, name: 'rose 6'},
{value: 12, name: 'rose 7'},
{value: 10, name: 'rose 8'},
{value: 20, name: 'rose 9'},
{value: 60, name: 'rose 10'}
]
const colors=['#9fe6b8', '#32c5e9', '#5eb5fc', '#1d9dff', '#8378ea', '#aa6eff', '#e7bcf3', '#fb7293', '#ff9f7f', '#ffdb5c'];
for (let index = 0; index < roseData.length; index++) {
roseData[index].itemStyle = {
color: colors[index]
};
}
const originDataLen = roseData.length;
const spanAngle = 180; // 需要显示的角度
const repeatedMultiple = 360 / spanAngle;
// 这里根据要显示的角度 计算了需要插入的数据量
const addDataLen = parseInt((repeatedMultiple - 1) * originDataLen);
for (let index = 0; index < addDataLen; index++) {
roseData.push({
name: null,
// 这里给数据置零,即在视觉上不显示
value: 0,
// 这里保证了异常情况下(数据都为0时)作为占位的数据在视觉上仍为不可见状态。
itemStyle:{
color: 'rgba(0,0,0,0)'
},
tooltip: {
show: false,
formatter: null
}
});
}
option = {
series: [
{
name: '面积模式',
type: 'pie',
roseType: 'area',
radius: '110%',
center: ['50%', '90%'],
startAngle: 180,
label: {
show: false
},
data: roseData
},
{
type: 'gauge',
radius: '110%',
center: ['50%', '90%'],
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 20,
axisLine: {
lineStyle: {
width: 1,
color: [
[1, '#213d85']
]
}
},
axisTick: {
show: false,
length: 18,
lineStyle: {
color: 'auto',
width: 1
}
},
splitLine: {
length: '0',
lineStyle: {
color: 'auto',
width: 1
}
},
axisLabel: {
color: '#464646',
fontSize: 16,
distance: -60,
formatter: function (value) {
if (value === 0.05) {
return '部门1';
}
else if (value === 0.15) {
return '部门2';
}
else if (value === 0.25) {
return '部门3';
}
else if (value === 0.35) {
return '部门4';
}
else if (value === 0.45) {
return '部门5';
}
else if (value === 0.55) {
return '部门6';
}
else if (value === 0.65) {
return '部门7';
}
else if (value === 0.75) {
return '部门8';
}
else if (value === 0.85) {
return '部门9';
}
else if (value === 0.95) {
return '部门10';
}
}
},
title: {
offsetCenter: [0, '-20%'],
fontSize: 30
},
detail: {
fontSize: 50,
offsetCenter: [0, '0%'],
valueAnimation: true,
formatter: function (value) {
return Math.round(value * 100) + '分';
},
color: 'auto'
},
data: []
},{
type: 'gauge',
radius: '110%',
center: ['50%', '90%'],
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 10,
axisLine: {
lineStyle: {
width: 1,
color: [
[1, '#213d85']
]
}
},
axisTick: {
show: false,
distance: 0,
lineStyle: {
color: 'auto',
width: 1
}
},
splitLine: {
distance: 0,
length: '100%',
lineStyle: {
color: 'auto',
width: 1
}
},
axisLabel: {
show: false
},
data: []
},{
type: 'gauge',
radius: '88%',
center: ['50%', '90%'],
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 10,
axisLine: {
lineStyle: {
width: 1,
color: [
[1, '#213d85']
]
}
},
axisTick: {
show: false,
length: 18,
lineStyle: {
color: 'auto',
width: 1
}
},
splitLine: {
length: '80%',
lineStyle: {
color: 'auto',
width: 1
}
},
axisLabel: {
color: '#464646',
fontSize: 20,
formatter: function (value) {
if (value === 0.05) {
return '优';
}
else if (value === 0.625) {
return '中';
}
else if (value === 0.375) {
return '良';
}
else if (value === 0.125) {
return '差';
}
}
},
title: {
offsetCenter: [0, '-20%'],
fontSize: 30
},
detail: {
fontSize: 50,
offsetCenter: [0, '0%'],
valueAnimation: true,
formatter: function (value) {
return Math.round(value * 100) + '分';
},
color: 'auto'
},
data: []
},
{
type: 'gauge',
radius: '66%',
center: ['50%', '90%'],
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 10,
axisLine: {
lineStyle: {
width: 1,
color: [
[1, '#213d85']
]
}
},
axisTick: {
show: false,
length: 18,
lineStyle: {
color: 'auto',
width: 2
}
},
splitLine: {
length: '80%',
lineStyle: {
color: 'auto',
width: 1
}
},
axisLabel: {
show: false,
color: '#464646',
fontSize: 20,
distance: -60,
formatter: function (value) {
if (value === 0.875) {
return '优';
}
else if (value === 0.625) {
return '中';
}
else if (value === 0.375) {
return '良';
}
else if (value === 0.125) {
return '差';
}
}
},
data: []
},
{
type: 'gauge',
radius: '44%',
center: ['50%', '90%'],
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 10,
axisLine: {
lineStyle: {
width: 1,
color: [
[1, '#213d85']
]
}
},
axisTick: {
show: false,
length: 18,
lineStyle: {
color: 'auto',
width: 2
}
},
splitLine: {
length: '80%',
lineStyle: {
color: 'auto',
width: 1
}
},
axisLabel: {
show: false,
color: '#464646',
fontSize: 20,
distance: -60,
formatter: function (value) {
if (value === 0.875) {
return '优';
}
else if (value === 0.625) {
return '中';
}
else if (value === 0.375) {
return '良';
}
else if (value === 0.125) {
return '差';
}
}
},
data: []
},
{
type: 'gauge',
radius: '22%',
center: ['50%', '90%'],
startAngle: 180,
endAngle: 0,
min: 0,
max: 1,
splitNumber: 10,
axisLine: {
lineStyle: {
width: 1,
color: [
[1, '#213d85']
]
}
},
axisTick: {
show: false,
length: 18,
lineStyle: {
color: 'auto',
width: 2
}
},
splitLine: {
length: '80%',
lineStyle: {
color: 'auto',
width: 1
}
},
axisLabel: {
show: false,
color: '#464646',
fontSize: 20,
distance: -60,
formatter: function (value) {
if (value === 0.875) {
return '优';
}
else if (value === 0.625) {
return '中';
}
else if (value === 0.375) {
return '良';
}
else if (value === 0.125) {
return '差';
}
}
},
data: []
}]
};