饼图
配置项如下
var sData = [{
name: "已配送",
value: 40
}, {
name: "未配送",
value: 46
}, {
name: "已终止",
value: 14
}];
var data = [];
var dataRotate = [];
var color = ['#1382D3', '#2D61E8', '#4F2CDE']
for (var i = 0; i < sData.length; i++) {
data.push({
value: sData[i].value,
name: sData[i].name,
itemStyle: {
normal: {
borderWidth: 6,
// shadowBlur: 20,
borderColor: color[i],
// shadowColor: color[i]
}
}
}, {
value: 1,
name: '',
itemStyle: {
normal: {
label: {
show: false
},
labelLine: {
show: false
},
color: 'rgba(0, 0, 0, 0)',
borderColor: 'rgba(0, 0, 0, 0)',
borderWidth: 0
}
}
});
dataRotate.push({
value: sData[i].value,
name: sData[i].name,
itemStyle: {
normal: {
borderWidth: 6,
borderColor: color[i],
}
},
label:{
rotate:angleText(i),
}
}, {
value: 1,
name: '',
itemStyle: {
normal: {
label: {
show: false
},
labelLine: {
show: false
},
color: 'rgba(0, 0, 0, 0)',
borderColor: 'rgba(0, 0, 0, 0)',
borderWidth: 0
}
}
});
}
var legendData = [];
for (var i = 0; i < sData.length; i++) {
legendData.push(sData[i].name)
}
function Pie() {
let dataArr = [];
for (var i = 0; i < 300; i++) {
if (i % 5 === 0) {
dataArr.push({
name: (i + 1).toString(),
value: 20,
itemStyle: {
normal: {
color: "rgba(0,255,255,.3)",
borderWidth: 0,
borderColor: "rgba(0,0,0,0)"
}
}
})
} else {
dataArr.push({
name: (i + 1).toString(),
value: 30,
itemStyle: {
normal: {
color: "rgba(0,0,0,0)",
borderWidth: 0,
borderColor: "rgba(0,0,0,0)"
}
}
})
}
}
return dataArr
}
function angleText(i) {
let totalValue = 0;
let initValue = 0;
for (var j = 0; j < sData.length; j++){
totalValue += sData[j].value;
}
for(var k=0; k< sData.length; k++){
if(k<i){
initValue += sData[k].value;
}
}
//每个元素的角度
var everyAngle = 360 / totalValue;
//文字现在所在的角度
var currentAngle = (sData[i].value/2+initValue) * everyAngle;
if (currentAngle <= 90) {
return -currentAngle;
} else if (currentAngle <= 180 && currentAngle > 90) {
return -currentAngle;
} else if (currentAngle < 270 && currentAngle > 180) {
return -currentAngle;
} else if (currentAngle < 360 && currentAngle >= 270) {
return -currentAngle;
}
}
var seriesOption = [{
name: '',
type: 'pie',
clockWise: true,
radius: ['64%', '67%'],
hoverAnimation: false,
itemStyle: {
normal: {
label: {
show: true,
// position: 'outside',
distanceToLabelLine: 10,
color: '#ddd',
formatter: function(params) {
var percent = 0;
var total = 0;
for (var i = 0; i < sData.length; i++) {
total += sData[i].value;
}
percent = ((params.value / total) * 100).toFixed(2);
if (params.name !== '') {
return percent + '%';
// return params.name + '\n' + '\n' + percent + '%';
} else {
return '';
}
},
},
labelLine: {
length: 20,
length2: 20,
show: false,
color: '#00ffff'
}
}
},
data: data
},
{
type: 'pie',
silent: true, //取消高亮
radius: ['64%', '67%'],
// center: ["50%", "50%"],
labelLine: {
normal: {
length: 20,
length2: 0,
lineStyle: {
color: 'transparent'
}
}
},
label: {
normal: {
formatter: params => {
return '{cir|▴}';
},
rich: {
cir: {
fontSize: 40,
},
}
},
},
data: dataRotate,
z: -1
},
{
type: 'pie',
zlevel: 0,
silent: true,
startAngle: -147.5,
radius: ['59%', '58%'],
z: 1,
label: {
normal: {
show: false
},
},
labelLine: {
normal: {
show: false
}
},
data: Pie()
},{
type: 'gauge',
radius: '40%',
startAngle:'0',
endAngle:'-359.99',
splitNumber: 10,
center: ['50%', '50%'],
pointer: {
show: false
},
title: {
show: false
},
detail: {
show: false
},
axisLine: {
lineStyle: {
width: 30,
color: [
[0, '#5fa7ca'],
[1, '#5fa7ca']
],
opacity: 0
}
},
axisTick: {
length: 16,
lineStyle: {
color: 'auto'
}
},
splitLine: {
show: false
},
axisLabel: {
show: false,
}
},{
name: '第二层环',
type: 'pie',
z: 1,
tooltip: {
show: false
},
center: ['50%', '50%'],
radius: ['36%', '37%'],
hoverAnimation: false,
clockWise: false,
itemStyle: {
normal: {
borderWidth: 5,
shadowBlur: 15,
borderColor:'rgba(98,200,249,.3)',
shadowColor: 'rgba(98,200,249,.3)',
color: 'rgba(98,200,249,.95)',
},
emphasis: {
color: 'rgba(98,200,249,.95)',
}
},
label: {
show: false
},
data: [100]
},{
name: '第一层环',
type: 'pie',
z: 1,
tooltip: {
show: false
},
center: ['50%', '50%'],
radius: ['29%', '33%'],
hoverAnimation: false,
clockWise: false,
itemStyle: {
normal: {
borderWidth: 5,
shadowBlur: 15,
borderColor:'rgba(255,255,255,.3)',
shadowColor: 'rgba(255,255,255,.3)',
color: 'rgba(255,255,255,.95)',
},
emphasis: {
color: 'rgba(255,255,255,.95)',
}
},
label: {
show: false
},
data: [100]
}];
option = {
backgroundColor: '#0A2E5D',
color: color,
title: {
text: '',
top: '48%',
textAlign: "center",
left: "49%",
textStyle: {
color: '#fff',
fontSize: 22,
fontWeight: '400'
}
},
graphic: {
elements: [{
type: "image",
z: 3,
style: {
width: 178,
height: 178
},
left: 'center',
top: 'center',
position: [100, 100]
}]
},
tooltip: {
show: false
},
legend: {
// icon: "rect",
itemWidth: 20,
itemHeight: 10,
orient: 'vertical',
data: legendData,
right: '8%',
align: 'right',
top: 'center',
textStyle: {
color: "#fff",
padding: [0,10,0,0]
},
itemGap: 40,
borderRadius:5,
},
toolbox: {
show: false
},
series: seriesOption
}