Highcharts:为图例添加额外的文字

时间:2015-12-02 10:38:16

标签: javascript highcharts legend

大家好我有一个带有图例格式的饼图:

{
    enabled: true,
    labelFormatter: function() {
        return  this.name + ' (Gesamt: ' + this.y + ' - '  + this.percentage.toFixed(1) + '%)' ;
    },
    borderWidth: 1
};

在某些特定情况下,我需要添加一个额外的文字,我将其定义为text =' Extra'到这个传说盒子。剩下的传说我仍然把它们放在盒子里。我怎样才能做到这一点 ?

我的jsfiddle代码:http://jsfiddle.net/wjnnt28p/

2 个答案:

答案 0 :(得分:2)

您可以添加一些if条件并显示您想要的文字。

E.g。 :

labelFormatter: function() {
  var p = this.name + ' (Gesamt: ' + this.y + ' - ' + this.percentage.toFixed(1) + '%)';
  if (this.name == 'Chrome') { // Test the name
    return p + ' Other Text for Chrome';
  } else {
    return p;
  }
}

完整示例:

$(function () {

  $(document).ready(function () {

    var text = 'Extra';

    // Build the chart
    $('#container').highcharts({
      chart: {
        plotBackgroundColor: null,
        plotBorderWidth: null,
        plotShadow: false,
        type: 'pie'
      },
      title: {
        text: 'Browser market shares January, 2015 to May, 2015'
      },
      tooltip: {
        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
      },
      plotOptions: {
        pie: {
          allowPointSelect: true,
          cursor: 'pointer',
          dataLabels: {
            enabled: false
          },
          showInLegend: true
        }
      },

      legend: {
        enabled: true,
        labelFormatter: function () {
          var p = this.name + ' (Gesamt: ' + this.y + ' - ' + this.percentage.toFixed(1) + '%)';
          if (this.name == 'Chrome') { // Test the name
            return p + ' Other Text for Chrome';
          } else {
            return p;
          }
        },
        borderWidth: 1
      },

      series: [{
        name: 'Brands',
        colorByPoint: true,
        data: [{
          name: 'Microsoft Internet Explorer',
          y: 56.33
        }, {
          name: 'Chrome',
          y: 24.03,
          sliced: true,
          selected: true
        }, {
          name: 'Firefox',
          y: 10.38
        }, {
          name: 'Safari',
          y: 4.77
        }, {
          name: 'Opera',
          y: 0.91
        }, {
          name: 'Proprietary or Undetectable',
          y: 0.2
        }]
      }]
    });
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 310px; height: 400px; max-width: 600px; margin: 0 auto"></div>

答案 1 :(得分:1)

更新2 fiddle with empty series,extra legend(最新启用了数据标签)

你几乎就在那里,使用这个&gt;&gt;在你的系列数据中添加一个“额外”字段。

<强>更新

           labelFormatter: function() {
                  if(this.extra !=null){
                    return  this.name + ' ('+this.extra+': ' + this.y + ' - '                                                   + this.percentage.toFixed(1) + '%)' ;
                }else{
                   return  this.name + '(' + this.y + ' - '                                                     + this.percentage.toFixed(1) + '%)' ;
                }}

See the fiddle here

设置if条件以摆脱undefined。

根据以下评论

创建一个名为“Extra” OR 的空系列,如下所示

 labelFormatter: function() { if(this.y ==null) return "Extra Legend"; jsfiddle.net/wjnnt28p/4

捕捉是,因为您正在格式化图例,如果y没有任何值,它将显示未定义的文本。 (空系列案例)那里写入条件逻辑。

第二个解决方案是返回“额外标签”,但点击此图例将没有数据,因此可以覆盖legendclick。