配置项如下
var startColor = ['#dd8361', '#47c7ee', '#d9b778', '#4d37e5'];
var endColor = ['#db4b51', '#48d5a9', '#b5cf43', '#8222fe'];
var endData = [];
var data = [{
"name": "第一次",
"value": 300
}, {
"name": "第二次",
"value": 200
}, {
"name": "第三次",
"value": 900
},
{
"name": "第四次及以上",
"value": 500
}]
data.map((item, index) => {
endData.push({
value: item.value
})
});
var allData = data.concat(endData);
for(let i=0;i<allData.length;i++){
if(i<data.length){
allData[i].itemStyle = {
normal: {
color: {
type: 'linear',
x: 1,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: endColor[i] // 0% 处的颜色
}, {
offset: 0.5, color: endColor[i] // 0% 处的颜色
}, {
offset: 1, color: startColor[i] // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
}
}
};
}else{
allData[i].itemStyle= {
normal: {
color: 'pink',
opacity:0,
}
};
allData[i].label={
normal:{
show:false
}
}
}
}
//数字每三位 加,的
function toThousands(num) {
var result = '', counter = 0;
num = (num || 0).toString();
for (let i = num.length - 1; i >= 0; i--) {
counter++;
result = num.charAt(i) + result;
if (!(counter % 3) && i != 0) {
result = ',' + result;
}
}
return result;
};
option = {
backgroundColor:'#021d49',
tooltip: {
trigger: 'item',
formatter: "{a} :<br/>{b}: {c}人"
},
title: {
text: "性质",
left: '49.5%',
top: '48%',
textAlign: 'center',
textBaseline: 'middle',
textStyle: {
fontSize: 16
}
},
series: [
// 内层圆圈
{
name: "性质",
type: 'pie',
radius: ['0', '38'],
center: ['50%', '50%'],
startAngle: 180,
// center: ['50%', '100%'],
z: 5,
animation: false,
hoverAnimation: false,
avoidLabelOverlap: false,
label: {
normal: {
show: false,
},
},
data: [{
value: 10,
name: '年龄',
itemStyle: {
normal: {
color: '#d4d4d6',
shadowColor: 'rgba(0, 0, 0, 0.6)',
shadowBlur: 30,
}
}
},
{
value: 10,
name: '年龄',
itemStyle: {
normal: {
color: '#d4d4d6',
opacity: 0,
}
}
},
],
tooltip: {
show: false
}
},
// 外层圆圈
{
name: "性质",
type: 'pie',
radius: ['86', '95'],
center: ['50%', '50%'],
// center: ['50%', '100%'],
animation: false,
z: 3,
avoidLabelOverlap: false,
hoverAnimation: false,
startAngle: 180,
label: {
normal: {
show: false,
},
},
tooltip: {
show: false
},
data: [{
value: 10,
name: name,
itemStyle: {
normal: {
color: 'rgba(210, 210, 210, 0.55)',
shadowColor: 'rgba(0, 0, 0, 1)',
shadowBlur: 100
}
}
},
{
value: 10,
name: name,
itemStyle: {
normal: {
color: 'rgba(210, 210, 210, 0.55)',
opacity: 0,
}
}
},
]
},
// 中间数据层 所传的第三组数据才是真实的数据
{
name: "性质",
type: 'pie',
radius: ['38', '86'],
center: ['50%', '50%'],
hoverAnimation: false,
// minAngle: 10,
avoidLabelOverlap: false,
illShowZeroSum: true,
startAngle: 180,
label: {
normal: {
show: true,
// 判断6个字以上的份两行 数字过千的有逗号
formatter: function(prams) {
let ret = ""; //拼接加\n返回的类目项
let maxLength = 3; //每项显示文字个数
let valLength = prams.name.length; //X轴类目项的文字个数
let rowN = Math.round(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1) //如果类目项的文字大于3,
{
for (let i = 0; i < rowN; i++) {
let temp = ""; //每次截取的字符串
let start = i * maxLength; //开始截取的位置
let end = start + maxLength; //结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
temp = prams.name.substring(start, end) + "\n";
ret += temp; //凭借最终的字符串
}
return '{b|' + ret + '}' + '{c|' + toThousands(prams.value) + '}';
} else {
return '{b|' + prams.name + '}\n' + '{c|' + toThousands(prams.value) + '}';
}
},
position: 'outside',
textStyle: {
fontSize: '14',
},
rich: {
b: {
color: '#f2f2f2',
lineHeight: 15,
},
c: {
color: '#7fe3ff'
}
}
},
emphasis: {
show: true,
}
},
labelLine: {
normal: {
show: false,
length: 15,
length2: 10,
}
},
data: allData
},
]
};