配置项如下
var getnhname = ['教师','学生'];
var getnhvalue = [4,95];
var getflname = ['其他', '用餐支出', '用水支出', '用电支出'];
var getflvalue = [10,40,35,15];
// 圆环值
var data1 = [];
for(var i = 0;i<getflname.length;i++){
data1.push({name:getflname[i],value:getflvalue[i]})
}
// 环内
var data2 = [];
for(var i = 0;i<getnhname.length;i++){
data2.push({name:getnhname[i],value:getnhvalue[i]})
}
// 圆环颜色
var color = [{
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: '#FDC48D' // 0% 处的颜色
},
{
offset: 1,
color: '#EAC093' // 100% 处的颜色
}
],
}, {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: '#4A92FF' // 0% 处的颜色
},
{
offset: 1,
color: '#75D0FF' // 100% 处的颜色
}
],
}, {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: '#7464F2' // 0% 处的颜色
},
{
offset: 1,
color: '#7488FF' // 100% 处的颜色
}
],
}, {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: '#54C7C0' // 0% 处的颜色
},
{
offset: 1,
color: '#93FFF3' // 100% 处的颜色
}
],
}, ]
// 内环边框
var innerColor = ['#F1C191', '#AFD4FF']
var dataConsump = [];
var dataType = []
for (var i = 0; i < data1.length; i++) {
dataConsump.push({
value: data1[i].value,
name: data1[i].name,
});
}
for (let i = 0; i < data2.length; i++) {
dataType.push({
name: data2[i].name,
value: data2[i].value,
itemStyle: {
shadowBlur: 7,
borderWidth: 2,
color: '#010818',
borderColor: innerColor[i],
shadowColor: innerColor[i]
},
// selected: i === 0
})
}
var seriesOption = [{
name: '分类',
type: 'pie',
radius: ['0%', '50%'],
center: ['50%', '50%'],
label: {
position: 'inner',
color: '#C1F6FF',
formatter: function(params) {
return params.percent + '%' + '\n' + '\n' + params.name;
}
},
hoverOffset: 0,
selectedMode: true,
selectedOffset: 10,
itemStyle: {
borderColor: 'black',
borderWidth: 2,
},
data: dataType
},
{
name: '',
type: 'pie',
radius: ['60%', '70%'],
center: ['50%', '50%'],
color: 'transparent',
hoverAnimation: false,
itemStyle: {
normal: {
color: 'transparent',
label: {
show: true,
position: 'outside',
color: '#66799D',
padding: [-2, -4, 0, -4],
fontSize: 13,
formatter: function(params) {
var percent = 0;
var total = 0;
for (var i = 0; i < data1.length; i++) {
total += data1[i].value;
}
percent = ((params.value / total) * 100).toFixed(0);
if (params.name !== '') {
return '{percent|' + percent + '%}\n{hr|}\n{name|' + params.name + '}';
} else {
return '';
}
},
rich: {
name: {
color: "#656565",
fontSize: 14,
padding: [6, 5, 6, 0],
align: 'left'
},
hr: {
borderColor: 'rgba(102, 121, 157, 1)',
width: '100%',
borderWidth: 0.5,
height: 0,
},
percent: {
color: "rgba(193, 246, 255, 1)",
fontSize: 14,
padding: [6, 5, 6, 0],
align: 'center'
},
}
},
labelLine: {
length: 40,
length2: 0,
show: true,
lineStyle: {
color: 'rgba(102, 121, 157, 1)'
}
}
}
},
data: dataConsump
}
];
var num = 0
const seriesOption2 = data1.map((item, index) => {
num += item.value
const a = {
type: 'bar',
data: [, , , num],
coordinateSystem: 'polar',
z: 9999 - index,
name: '抢修项目',
roundCap: true,
color: color[index],
barGap: '-100%',
itemStyle: {
normal: {
// borderWidth: 6,
shadowBlur: 5,
// color: 'transparent',
// borderColor: color[i],
shadowColor: color[index]
}
}
}
return a
})
option = {
backgroundColor: '#010818',
color: color,
tooltip: {
show: false
},
legend: {
show: false,
icon: "circle",
orient: 'horizontal',
// x: 'left',
data: ['其他', '用餐支出', '用水支出', '用电支出'],
right: 340,
bottom: 150,
align: 'right',
textStyle: {
color: "#C1F6FF"
},
itemGap: 20
},
angleAxis: {
axisLine: {
show: false
},
axisLabel: {
show: false
},
splitLine: {
show: false
},
axisTick: {
show: false
},
min: 0,
max: 100,
boundaryGap: ['0', '100'],
startAngle: 90
},
polar: {
radius: '80%'
},
radiusAxis: {
type: 'category',
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
},
data: ['a', 'b', 'c','d'],
z: 10
},
polar: {
radius: '70%'
},
toolbox: {
show: false
},
series: [...seriesOption, ...seriesOption2]
}