提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。
说明
如何实现堆积柱图上显示合计值,就是在红框位置显示合计值。
设置步骤
1.创建好堆积柱图,如下:
2.新建客户端模块:
3.具体宏代码如下:
注:此宏代码不支持同时显示柱图的数据标签,若是需要显示数据标签,需要修改宏代码。
/** * 宏类型:ClientSide(服务端) * 对象:chart * 事件:afterRenderer */ function main(chartView) { var options = chartView.getChartObject().getOptions(); var series = options.series; var totals = buildTotal(series); var lastIndex = series.length - 1; series[lastIndex].label = { normal: { position: 'top', show: true, formatter: function(a) { return totals[a.dataIndex]; } }, emphasis: { position: 'top', show: true, formatter: function(a) { return totals[a.dataIndex]; } } } chartView.getChartObject().getChart().setOption(options); } function buildTotal(series) { var totalLength = series[0].data.length; var totals = []; for (var k = 0; k < totalLength; k++) { totals[k] = 0; } for (var i = 0; i < series.length; i++) { for (var j = 0; j < series[i].data.length; j++) { totals[j] += getValue(series[i].data[j].value); } } return totals; } //获取数据项的值 function getValue(value) { if (Array.isArray(value)) { return value[1]; } else { value; } }
4.最终效果图:
3 评论
林桐 发表:
及时雨
林桐 发表:
适用于电子表格的版本:
/**
* 宏类型:ClientSide(服务端)
* 对象:chart
* 事件:afterRenderer
*/
function main(chartView) {
var options = chartView.getChartObject().getOptions();
var series = options.series;
var totals = buildTotal(series);
var lastIndex = series.length - 1;
series[lastIndex].label = {
normal: {
position: 'top',
show: true,
formatter: function(a) {
return totals[a.dataIndex];
}
},
emphasis: {
position: 'top',
show: true,
formatter: function(a) {
return totals[a.dataIndex];
}
}
}
chartView.getChartObject().getChart().setOption(options);
}
function buildTotal(series) {
var totalLength = series[0].data.length;
var totals = [];
for (var k = 0; k < totalLength; k++) {
totals[k] = 0;
}
debugger;
for (var i = 0; i < series.length; i++) {
for (var j = 0; j < series[i].data.length; j++) {
totals[j] += getValue(series[i].data[j].value);
}
}
return totals;
}
//获取数据项的值
function getValue(value) {
if (value instanceof Array) {
return value[1];
}else if(typeof value =="object"){
return value[1];
} else {
value;
}
}
王峰 发表:
value instanceof Array在谷歌浏览器调试判断不成功(IE也不行),需使用Array.isArray(value)判断