Google Chart:标记堆积的柱形图

时间:2014-02-19 10:26:49

标签: charts google-visualization

基于googleAPI文档:  https://developers.google.com/chart/interactive/docs/gallery/columnchart?hl=en

正如您在“标记列”部分中看到的那样,每列都标有静态值。我想知道是否可以标记一个具有特定值的列,该值是所有的总和。

// Set chart options
     var options = {

         width: 400,
         height: 300,
         calc:????
     };

我应该使用特定功能设置此“calc”字段吗?

JSFIDDLE: Total Labeling Column

我无法弄清楚如何使用每个堆叠列的总和值自定义标签。

2 个答案:

答案 0 :(得分:4)

您可以使用getNumberOfRows()getNumberOfColumns()getValue()函数计算总数并设置该值而不是字符串total

function drawChart() {
    // Create the data table.
    var data = new google.visualization.arrayToDataTable(array);

    for (var i = 0; i < data.getNumberOfRows(); i++) {
        var total = 0;

        for (var j = 1; j < data.getNumberOfColumns() - 2; j++) {
            // console.log(data.getValue(i, j));
            total += data.getValue(i, j);
        }
        data.setValue(i, data.getNumberOfColumns() - 1, '' + total);
    }
...

您必须更改图表的大小或字体大小才能获得在列上正确显示的值。标签显示正确。

答案 1 :(得分:4)

这是我的答案..我希望它可以帮助有同样问题的人。

 function getValueAt(column, dataTable, row) {
     return dataTable.getFormattedValue(row, column);
 }

 function setLabelTotal(dataTable) {
     //dataTable must have role: annotation
     var SumOfRows = 0;   

     for (var row = 0; row < dataTable.getNumberOfRows(); row++) {
         SumOfRows = 0;
         for (var col = 0; col < dataTable.getNumberOfColumns(); col++) {

             if (dataTable.getColumnType(col) == 'number') {
                 SumOfRows += dataTable.getValue(row, col);
             }
             if(dataTable.getColumnRole(col) == 'annotation')
             {dataTable.setValue(row, col, SumOfRows.toString());}
         }
     }
 } 

请注意,您必须在main函数上调用这些方法(例如“drawChart”)。