配置项如下
let datas = [{
'name': '菜菜',
'period': '9.10',
'amount': 274600,
'orderCount': 1670,
},
{
'name': '佛生',
'period': '13.1',
'amount': 147477,
'orderCount': 436,
},
{
'name': '我',
'period': '7.5',
'amount': 15997,
'orderCount': 72,
},
{
'name': 'Jiayin',
'period': '10.0',
'amount': 65796,
'orderCount': 544,
},
{
'name': '明坤',
'period': '10.5',
'amount': 310364,
'orderCount': 979,
},
{
'name': '首席',
'period': '6.5',
'amount': 8305,
'orderCount': 85,
},
{
'name': '小楠子+',
'period': '9.1',
'amount': 210284,
'orderCount': 2224,
},
{
'name': '康康',
'period': '10.10',
'amount': 41789,
'orderCount': 237,
},
{
'name': '书记',
'period': '10.7',
'amount': 36961,
'orderCount': 452,
},
{
'name': '书记夫人',
'period': '9.0',
'amount': 68088,
'orderCount': 647,
},
{
'name': 'vv',
'period': '8.3',
'amount': 72896,
'orderCount': 1743,
},
{
'name': 'qq',
'period': '6.10',
'amount': 52276,
'orderCount': 627,
},
];
let min = 0;
let max = 0;
let packedDatas = packDatas(datas);
option = {
backgroundColor: '#efefef',
title: {
text: '某群淘宝人生账单分布',
left: 'center',
top: 0,
},
tooltip: {
padding: 10,
backgroundColor: '#222',
borderColor: '#777',
borderWidth: 1,
formatter: function(obj) {
var value = obj.value;
return '<div style="border-bottom: 1px solid rgba(255,255,255,.3); font-size: 18px;padding-bottom: 7px;margin-bottom: 7px">' +
value[2] +
'(' + value[3] + ')' +
'</div>' +
'订单数:' + value[0] + '<br>' +
'消费金额:' + value[1] + '<br>' +
'AVT:' + value[4].toFixed(2) + '<br>';
}
},
xAxis: {
splitLine: {
show: false,
},
scale: true,
type: 'value',
name: '订单数',
},
yAxis: {
splitLine: {
show: false,
},
scale: true,
type: 'value',
name: '消费金额',
},
visualMap: [{
show: false,
min: min,
max: max,
dimension: 5,
inRange: {
color: [
'#fed8a7',
'#ee2021',
],
}
}, ],
series: [{
symbolSize: function(data) {
return data[1] / (data[0] * 3);
},
label: {
show: true,
position: 'top',
formatter: function(param) {
return param.data[2];
},
},
itemStyle: {
normal: {
shadowBlur: 10,
shadowColor: 'rgba(25, 100, 150, 0.5)',
shadowOffsetY: 5,
},
},
markLine: {
itemStyle: {
normal: {
lineStyle: {
type: 'solid',
color: '#000'
},
label: {
show: true,
position: 'left'
}
}
},
large: true,
effect: {
show: true,
loop: true,
period: 0,
scaleSize: 2,
color: null,
shadowColor: null,
shadowBlur: null
},
},
data: packedDatas,
type: 'scatter',
}, ]
};
function packDatas(datas) {
let packedDatas = datas.map((data) => {
let name = data['name'];
let periods = data['period'].split('.');
let period = periods[0] + ' 年 ' + periods[1] + ' 个月';
let orderCount = data['orderCount'];
let amount = data['amount'];
let avt = amount / orderCount;
let monthCount = Number.parseInt(periods[0]) * 12 + Number.parseInt(periods[1]);
min = min > 0 ? Math.min(min, monthCount) : monthCount;
max = Math.max(max, monthCount);
return [orderCount, amount, name, period, avt, monthCount];
});
return packedDatas;
}