简体   繁体   中英

How to display sum stack bar in echarts

I'm using eChatrs as chart library. Needed chart should look like this :

在此处输入图片说明

What i need, is to show totals above each column. What is the best practise for doing this ?

You can use formatter to achieve this, check this demo:

 let echartsObj = echarts.init(document.querySelector('#canvas')); series = [{ name: 'Server #1', data: [100, 115, 165, 107, 67] }, { name: 'Server #2', data: [85, 106, 129, 161, 123] }, { name: 'Server #3', data: [67, 87, 86, 167, 157] }] genFormatter = (series) => { return (param) => { console.log(param); let sum = 0; series.forEach(item => { sum += item.data[param.dataIndex]; }); return sum } }; option = { color: ['#b8d6f2', '#c6e19a', '#f3b879' ], legend: { data: series.map(item => item.name), right: 'right', }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] }, yAxis: { type: 'value' }, series: series.map((item, index) => Object.assign(item, { type: 'bar', stack: true, label: { show: index == series.length - 1 ? true : false, formatter: genFormatter(series), fontSize: 20, color: 'black', position: 'top' }, })) }; echartsObj.setOption(option) 
 <html> <header> <script src="https://cdn.bootcss.com/echarts/4.1.0.rc2/echarts-en.min.js"></script> </header> <body> <div id="canvas" style="width: 70%; height: 300px"> </div> </body> </html> 

However, as we can see, this demo only display total value above each column.

if you want both total value and value of each series,

here is a trick to achieve this: use a blank series to display total value.

check this demo:

 let echartsObj = echarts.init(document.querySelector('#canvas')); series = [{ name: 'Server #1', data: [100, 115, 165, 107, 67] }, { name: 'Server #2', data: [85, 106, 129, 161, 123] }, { name: 'Server #3', data: [67, 87, 86, 167, 157] }, { name: 'Server #3', data: [0,0,0,0,0] }] genFormatter = (series) => { return (param) => { console.log(param); let sum = 0; series.forEach(item => { sum += item.data[param.dataIndex]; }); return sum } }; function isLastSeries(index) { return index === series.length - 1 } option = { color: ['#b8d6f2', '#c6e19a', '#f3b879' ], legend: { data: series.map(item => item.name), right: 'right', }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] }, yAxis: { type: 'value' }, series: series.map((item, index) => Object.assign(item, { type: 'bar', stack: true, label: { show: true, formatter: isLastSeries(index) ? genFormatter(series) : null, fontSize: isLastSeries(index) ? 20 : 15, color: 'black', position: isLastSeries(index) ? 'top' : 'inside' }, })) }; echartsObj.setOption(option) 
 <html> <header> <script src="https://cdn.bootcss.com/echarts/4.1.0.rc2/echarts-en.min.js"></script> </header> <body> <div id="canvas" style="width: 70%; height: 400px"> </div> </body> </html> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM