echarts堆疊條形圖計算總數()
阿新 • • 發佈:2020-08-03
echart堆疊條形圖計算總數
先上圖
首先寫入一個數據用於最上邊總數的展示
option配置如下
option = { title: { text: '未處理' }, tooltip: { trigger: 'axis', axisPointer: { // 座標軸指示器,座標軸觸發有效 type: 'shadow' // 預設為直線,可選為:'line' | 'shadow' }, formatter: (param, ticket, callback) => { var str = '' for (const item of param) { item.seriesName && (str += item.marker + ' ' + item.seriesName + ':' + item.value + '<br>') } return str } }, legend: { data: ['高危', '中低', '低危'], right: '20px' }, grid: { left: '3%', right: '4%', bottom: '3%', width: '100%', containLabel: true }, xAxis: { data: ['業務系統1', '業務系統1', '業務系統1', '業務系統1', '業務系統1', '業務系統1', '業務系統1'] }, yAxis: { type: 'value' }, series: [ { name: '高危', type: 'bar', color: '#F56C6C', barWidth: 30, stack: '總量', label: { show: true }, data: [50, 60, 59, 50, 50, 50, 50] }, { name: '中低', type: 'bar', stack: '總量', color: '#F5AF45', barWidth: 30, label: { show: true }, data: [70, 70, 70, 70, 70, 70, 70] }, { name: '低危', type: 'bar', color: '#8BC663', stack: '總量', barWidth: 30, label: { show: true }, data: [70, 70, 70, 70, 70, 70, 70] }, { name: '', type: 'bar', data: [0,0,0,0,0,0,0,], color: '#bbf', stack: '總量', barWidth: 30, label: { show: true, position: 'top', color: 'black' } } ] };
效果如圖,其中通過formatter
進行tooltip的篩選,出現一個總和為0的樣式
接著在option外部對資料進行操作,使得最後一項的資料是前三項的總和
var series = option.series function getSum (params) { var datavalue = 0 for (var i = 0; i < series.length; i++) { datavalue += series[i].data[params.dataIndex] } return datavalue } series[series.length - 1].label.formatter = getSum myChart.setOption(option)
至此可完成基本效果,
但是 !!但是!!但是
echarts資料還有一個篩選功能,如圖:可以將點選高危,使其顏色變為灰色並且不展示,此時還要讓總數隨之變化
此時需要對資料監聽,在點選圖示時會觸發以下函式,先將回調的函式進行列印可看到如下結果
myChart.on('legendselectchanged', (obj) => {
console.log(obj)
})
也就是selected可檢視當前選中狀態,而之前的series[i]中的name即為對應的鍵值,因此只需判斷是否存在該點即可將未選擇的點過濾掉,接下來在對其進行因此setOption即可
myChart.on('legendselectchanged', (obj) => {
function getSum (params) {
var datavalue = 0
for (var i = 0; i < series.length; i++) {
if (obj.selected[series[i].name]) {
datavalue += series[i].data[params.dataIndex]
}
}
return datavalue
}
series[series.length - 1].label.formatter = getSum
myChart.setOption(option)
})