页面树结构
转至元数据结尾
转至元数据起始

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。

说明

如何实现堆积柱图上显示合计值,就是在红框位置显示合计值。

 

设置步骤

1.创建好堆积柱图,如下:


2.新建客户端模块:


3.具体宏代码如下:

 注:此宏代码不支持同时显示柱图的数据标签,若是需要显示数据标签,需要修改宏代码。


/**
 * 宏类型:ClientSide(服务端)
 * 对象:chart
 * 事件:afterRenderer
 */
 function main(chartView) {
    var options = chartView.getChartObject().getOptions();
    var series = options.series;
	if (series && series[0]) {
    	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.最终效果图:

另:若图形是横条图,按照下图修改最后面的代码。


        
  • 无标签

4 评论

  1. 林桐 发表:

  2. 林桐 发表:

    适用于电子表格的版本:

    /**

    * 宏类型: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;
    }
    }

  3. 刘俊 发表:

    使用宏,有一个弊端,如果要显示每个柱子的数据标签,那么用宏上面那个柱子的数据标签无法显示,所有功能可以不需要宏代码即可实现:在数据集里多添加一个字段=销售量+销售额,然后对这个合计的字段设置为散点图,将标记的大小设置为1,颜色设置为与上面那个柱子颜色一样,标签设置为显示在上方,在分别设置柱子的数据标签显示。

  4. 王峰 发表:

    value instanceof Array在谷歌浏览器调试判断不成功(IE也不行),需使用Array.isArray(value)判断