1

这是我用来解释问题的图表。

$(function () {
    $('#container').highcharts({

        chart: {
            type: 'column'
        },

        title: {
            text: 'Total fruit consumtion, grouped by gender'
        },

        xAxis: {
            categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas']
        },

        yAxis: {
            allowDecimals: false,
            min: 0,
            title: {
                text: 'Number of fruits'
            }
        },

        tooltip: {
            formatter: function() {
                return '<b>'+ this.x +'</b><br/>'+
                    this.series.name +': '+ this.y +'<br/>'+
                    'Total: '+ this.point.stackTotal;
            }
        },

        plotOptions: {
            column: {
                stacking: 'normal'
            }
        },

        series: [{
            name: 'John',
            data: [5, 3, 4, 7, 2],
            stack: 'male'
        }, {
            name: 'Joe',
            data: [3, 4, 4, 2, 5],
            stack: 'male'
        }, {
            name: 'Jane',
            data: [2, 5, 6, 2, 1],
            stack: 'female'
        }, {
            name: 'Janet',
            data: [3, 0, 4, 4, 3],
            stack: 'female'
        }]
    });
});

我们在传说中有系列名称。图表与分组列堆叠在一起。我们将它们分为男性和女性类别。

传说中有什么办法可以分男女吗?这样我们一次只能看到男性的食物消费或女性的食物消费。

你可以在这里参考小提琴 - jsfiddle.net/bLZHd/

谢谢

4

2 回答 2

2

您可以使用labelFormatter将项目名称替换为堆栈名称。两个系列应该隐藏在图例(showInLegend)参数中。然后,您只需要捕获 legendItemClick 并迭代以检查意甲堆栈名称。

legendItemClick: function () {
                    var chart = this.chart,
                        key = this.options.stack;   

                    $.each(this.chart.series,function(i,serie){

                        if(serie.options.stack === key) {
                            if(serie.visible)
                                serie.hide();
                            else
                                serie.show();
                        }    

                    });
                    return false;
                }

http://api.highcharts.com/highcharts#legend.labelFormatter

于 2013-07-05T09:35:39.317 回答
1

你真的需要根据传说切换吗?

我会向您推荐那种问题,即跨度切换:http: //jsfiddle.net/bLZHd/1/

所有你需要的是:

$.each(chart.series, function (k, v) {
    if (v.options.stack == elemId) { //elemId is the string to compare
        chart.series[k].show();
    } else {
        chart.series[k].hide();
    }
});
于 2013-07-05T06:24:59.400 回答