Add series total to legend in Highcharts

21,896

Solution 1

A more generic & dynamic answer:

legend: {
   labelFormatter: function() {
      var total = 0;
      for(var i=this.yData.length; i--;) { total += this.yData[i]; };
      return this.name + '- Total: ' + total;
   }
}

Solution 2

Figured it out. I added the total to the series, then called it with this.options. See updated code below:

        legend: {
          borderRadius:0,
            backgroundColor: '#FFFFFF',
            itemMarginBottom: 7,
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'top',                
            y: 30,
            x: 2,
            borderWidth: 0,
            width:130,
            symbolPadding: 10,
            useHTML:true,
            shadow: {
              color: '#000',
              width: 3,
              opacity: 0.15,
              offsetY: 2,
              offsetX: 1
            },
            labelFormatter: function() {
              return '<div class="' + this.name + '-arrow"></div><span style="font-family: \'Advent Pro\', sans-serif; font-size:16px">' + this.name +'</span><br/><span style="font-size:10px; color:#ababaa">(Total: ' + this.options.total + ')</span>';
        }
        },
        series: [{
            name: 'Honeywell',
            total: 9150,
            data: [700,725,750,850,950,1000,1025,1050,1050,1050]
        }, {
            name: 'Bombardier',
            total: 10548,
            data: [661,758,880,990,1065,1136,1193,1241,1289,1335]
        }, {
            name: 'Embraer',
            total: 9301,
            data: [747,789,839,861,890,908,984,1030,1097,1156]
        }]
    });
});
Share:
21,896

Related videos on Youtube

Mike
Author by

Mike

Updated on July 09, 2022

Comments

  • Mike
    Mike 3 months

    Using Highcharts.js - I want to add the series total to the legend (where it currently says '12345'). I know enough that I need to write a labelFormatter function, but I don't know enough JavaScript to figure out how to sum up the total of each series. Code is below (also live version here: http://jsbin.com/ukabob/8).

    $(function () {
    var chart;
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                type: 'line',
                backgroundColor: '#E9E7DC',
                borderRadius:0,
              margin: [0, 150, 30, 0]
            },
            colors: ['#A74B59', '#46C4B7', '#EDBA70'],
            credits: {
              enabled: false
            },          
            title: {
                text: null
            },            
            xAxis: {
                categories: ['2013', '2014', '2015', '2016', '2017', '2018',
                    '2019', '2020', '2021', '2022'],                
                gridLineWidth:1,
                gridLineColor: '#FFFFFF',
                labels: {
                  style: {
                    color: '#000000'
                  },
                  formatter: function() {
                    return '<div style="font-size:22px; font-family: \'Advent Pro\', sans-serif;">'+
                        this.value +'</div>';
                  },
                  y:25
                },
                lineColor: '#FFFFFF',
                tickColor: '#FFFFFF',
                tickLength: 30
            },
            yAxis: {
                gridLineWidth:0,
                title: {
                    text: null
                },
                labels: {
                  enabled: false
                }
            },
            plotOptions: {
              series: {
                marker: {
                    radius: 6,
                    lineWidth: 2,
                    lineColor: null, // inherit from series
                    symbol: 'circle',
                    states: {
                        hover: {
                            fillColor: '#E9E7DC',
                            lineWidth: 2,
                          radius:6
                        }
                    }
                },
                states: {
                  hover: {
                    lineWidth:4
                  }
                }
              }
            },
            tooltip: {
                borderWidth:0,
                borderRadius: 0
                },
            legend: {
              borderRadius:0,
                backgroundColor: '#FFFFFF',
                itemMarginBottom: 7,
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',                
                y: 30,
                x: 2,
                borderWidth: 0,
                width:130,
                symbolPadding: 10,
                useHTML:true,
                shadow: {
                  color: '#000',
                  width: 3,
                  opacity: 0.15,
                  offsetY: 2,
                  offsetX: 1
                },
                labelFormatter: function() {
                  return '<div class="' + this.name + '-arrow"></div><span style="font-family: \'Advent Pro\', sans-serif; font-size:16px">' + this.name +'</span><br/><span style="font-size:10px; color:#ababaa">(Total: 12345)</span>';
            }
            },
            series: [{
                name: 'Honeywell',
                data: [700,725,750,850,950,1000,1025,1050,1050,1050]
            }, {
                name: 'Bombardier',
                data: [661,758,880,990,1065,1136,1193,1241,1289,1335]
            }, {
                name: 'Embraer',
                data: [747,789,839,861,890,908,984,1030,1097,1156]
            }]
        });
    });
    });
    
  • Katelynn ruan
    Katelynn ruan about 7 years
    I was surprised that this work for me. HighChart didn't provide any documentation on this

Related