0

如何从饼图类型的图例中排除一​​个特定数据点,但显示所有其他数据点?

4

3 回答 3

3

我可以找到的 HighCharts 目前不存在该选项,但是,您可以对源代码进行一些修改以使其正常工作。

我使用v2.3.3了这个 hack 的版本,但是,其他版本可能会类似地工作。

有问题的代码在第 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=false 像这样:

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

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

于 2013-03-12T13:46:55.707 回答
0

你正在寻找

   chart.series[0].setData() 

工作演示 http://jsfiddle.net/XdfSd/

于 2013-03-12T13:57:30.317 回答
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();

                    }
于 2013-03-13T12:44:32.903 回答