Highcharts:堆积图表的传说

时间:2013-07-05 04:16:10

标签: highcharts

这是我举例解释这个问题的图表。

$(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 /

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();
    }
});