2013-03-12 77 views

回答

3

该选项目前不存在于HighCharts中,但我可以找到,但是,您可能可以对源代码进行一些黑客操作以使其正常工作。

我使用版本v2.3.3这个黑客,但是,其他版本可能类似的工作。

有问题的代码是围绕线9336:

allItems = []; 
    each(chart.series, function (serie) { 
     var seriesOptions = serie.options; 

     if (!seriesOptions.showInLegend) { 
      return; 
     } 

     // use points or series for the legend item depending on legendType 
     allItems = allItems.concat(
       serie.legendItems || 
       (seriesOptions.legendType === 'point' ? 
         serie.data : 
         serie) 
     ); 
    }); 

紧接该代码后,放置以下代码:

for (var i=0;i<allItems.length;i++){ 
     if (typeof allItems[i].showInLegend !== "undefined"){ 
      if (!allItems[i].showInLegend){ 
       allItems.splice(i,1) 
       i--; 
      } 
     } 
    } 

然后,对于设置showInLegend =假像这样的点:

{ 
    name: 'Chrome', 
    y: 12.8, 
    sliced: true, 
    selected: true, 
    showInLegend: false 
}, 

这是一个显示工作概念的JSFiddle:http://jsfiddle.net/mkremer90/zXSJW/

+0

不错的答案。也许是一个好主意,提到你修改了哪个版本的highcharts。 – SteveP 2013-03-12 14:06:57

+0

谢谢史蒂夫。可能会从我的电脑上长达一个小时,我正在擦拭硬盘。然后生病检查。 – MatthewKremer 2013-03-12 14:13:51

0

您可以在这个例子中使用 “假” 系列,如:

http://jsfiddle.net/Qaaqw/

,介绍如何在图例中显示定义的项目。

legendItemClick: function (event) { 
         console.log(this); 
         var thisSeriesId = this.id; 
         var thisSeriesVisibility = this.visible ? true : false; 

         $(chart.series).each(function (i, e) { 

          $(e.data).each(function(j, k){ 

           if (thisSeriesId === k.id) { 
            thisSeriesVisibility ? k.setVisible(false) : k.setVisible(true); 
           } 
          }); 
         }); 
         event.preventDefault(); 

        } 
+0

工作,谢谢! – 2013-03-13 16:43:02