echarts多列柱狀圖求合計,並且展示在最頂端
阿新 • • 發佈:2019-02-13
// 基於準備好的dom,初始化echarts例項
var myChart = echarts.init(document.getElementById('main'));
//定義圖表option
var option = {
tooltip : {
axisPointer : {
type : 'shadow'
}
},
title: {
text:'xxx啟用裝置數' ,
left:'left' ,
top:'10px',
textStyle: {
color: '#666',
fontWeight: 'normal'
}
},
toolbox: {
feature: {
dataView: {show: true , readOnly: false},
magicType: {show: true, type: ['line', 'bar']},
restore: {show: true},
saveAsImage: {show: true}
}
},
grid: {
y: '10%',
y2: '10%'
},
legend: {
data:['安卓','諾基亞','蘋果']
},
xAxis:{
type: 'category',
axisLabel:{
interval: 0, // {number}
rotate: 40
},
data: ['星期三','星期四']
},
yAxis:{
type: 'value',
min: 0,
interval: 10000
},
series: [
{
name:'安卓',
type:'bar',
stack:'xxx',
itemStyle: {
normal: {
color: '#548dd5'
}
},
data: [["星期三",10000],["星期四",20000]]
},
{
name:'諾基亞',
type:'bar',
stack:'xxx',
itemStyle: {
normal: {
color: '#000'
}
},
data: [["星期三",11000],["星期四",21000]]
},
{
name:'蘋果',
type:'bar',
stack:'xxx',
itemStyle: {
normal: {
color: '#e56c0a'
}
},
data: [["星期三",12000],["星期四",18000]]
},
{
name:'合計',
type:'bar',
stack:'xxx',
label: {
normal: {
show: true,
position: 'top',
textStyle: {
color: '#000'
},
formatter:''
}
},
data: [["星期三",0],["星期四",0]] //思路一:給series集合末尾多加一欄用於展示合計,但是值都是0;缺點:必須根據xAxis的data生成一組為空的資料,且tooltip不能加trigger: 'axis',這個條件,不然會展示合計:0
}
]
};
var series = option["series"];
var fun = function (params) {
var data3 =0;
for(var i=0,l=series.length;i<l;i++){
data3 += series[i].data[params.dataIndex][1]
}
return data3
}
//載入頁面時候替換最後一個series的formatter
series[series.length-1]["label"]["normal"]["formatter"] = fun
// 使用剛指定的配置項和資料顯示圖表。
myChart.setOption(option);
//legend點選事件,根據傳過來的obj.selected得到狀態是true的legend對應的series的下標,再去計算總和
myChart.on("legendselectchanged", function(obj) {
var b = obj.selected
, d = [];
//alert(JSON.stringify(b))
for(var key in b){
if(b[key]){
//alert(key)
for(var i=0,l=series.length;i<l;i++){
var changename = series[i]["name"];
if(changename == key){
d.push(i);//得到狀態是true的legend對應的series的下標
}
}
}
}
var fun1 = function (params) {
var data3 =0;
for(var i=0,l=d.length;i<l;i++){
for(var j=0,h=series.length;j<h;j++){
if(d[i] == j){
data3 += series[j].data[params.dataIndex][1] //重新計算總和
}
}
}
return data3
}
series[series.length-1]["label"]["normal"]["formatter"] = fun1
myChart.setOption(option);
})