在高级图表中向下钻取后无法恢复到原始状态

时间:2013-03-13 07:16:02

标签: highcharts drilldown

在我深入到第二级后,我无法回到我的图表的原始状态。需要注意的是,当我没有生成多个列(一个用于打开,一个用于关闭状态)时,我能够做到这一点,我很容易回到原始状态。这是我的代码:

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Team View</title>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">
$(function() {
var chart;
$(document).ready(function() {

    var colors = Highcharts.getOptions().colors,
        categories1 = ['January 2013','February 2013', 'March 2013']
        name = 'Issues',
        level = 0,
        data = [{
            y: 23,
            color: colors[0],
            drilldown: {
                type: 'column',
                name: 'Open issues for January 2013',
                categories: ['A', 'B', 'C', 'D', 'E'],
                level: 1,
                data1: [3, 2, 4, 0, 1],
                color: colors[4],

                name1:'Closed issues for January 2013',
                data2: [0, 0, 0, 0, 13],
                color1: colors[5]

            }},
        {
            y: 15,
            color: colors[1],
            drilldown: {
                type: 'column',
                name: 'Open issues for February 2013',
                categories: ['A', 'B', 'C', 'D', 'E'],
                level: 1,
                data1: [4, 0, 7, 0, 1],
                color: colors[4],

                name1:'Closed issues for February 2013',
                data2: [0, 0, 0, 0, 3],
                color1: colors[5]

            }},
        {
            y: 2,
            color: colors[2],
            drilldown: {
                type: 'column',
                name: 'Open issues for March 2013',
                categories: ['A', 'B', 'C', 'D', 'E'],
                level: 1,
                data1: [1, 0, 1, 0, 0],
                color: colors[4],

                name1: 'Closed issues for March 2013',
                data2: [0, 0, 0, 0, 0],
                color1: colors[5]

            }}];

    function setChart(name, categories, data, color, level, type) {
        console.log(name,categories,data,color,level,type);
        chart.xAxis[0].setCategories(categories);
        while(chart.series.length>0){
            chart.series[0].remove(true);
        }
        for (var i=0;i<data.length;i++){
        chart.addSeries({
            color: color[i],
            name: name[i],
            level: level,
            data: data[i],
            type: type
        });
        }
    }

    chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            type: 'line',
            backgroundColor: "#F7F7F7"
        },
        title: {
            text: null
        },
        subtitle: {
            text: null
        },
        xAxis: {
            categories: categories1,
            labels: {
                rotation: -45,
                y: 10,
                x: 10,
                align: "right"
            }
        },
        yAxis: {
            title: {
                text: 'Issues'
            },
            min: 0
        },
        credits: {
            enabled: false
        },
        plotOptions: {
            line: {
                cursor: 'pointer',
                point: {
                    events: {
                        click: function() {
                            var drilldown = this.drilldown;
                            if (drilldown) {
                                setChart([drilldown.name,drilldown.name1], drilldown.categories, [drilldown.data1,drilldown.data2], [drilldown.color,drilldown.color1], drilldown.level, drilldown.type);
                            } else { // restore
                                setChart(name, categories1, data, null, level, 'line');
                            }
                        }
                    }
                },
                dataLabels: {
                    enabled: true,
                    color: colors[0],
                    style: {
                        fontWeight: 'bold'
                    },
                    formatter: function() {
                        return this.y + 'Issues';
                    }
                }
            },
            column: {
                cursor: 'pointer',
                point: {
                    events: {
                        click: function() {
                            setChart(name, categories1, data, null, level, 'line');
                        }
                    }
                },
                dataLabels: {
                    enabled: true,
                    color: colors[0],
                    style: {
                        fontWeight: 'bold'
                    },
                    formatter: function() {
                        return this.y + 'Issues';
                    }
                }
            }
        },
        tooltip: {
            formatter: function() {
                var point = this.point,
                    s = '';
                switch (this.series.options.level) {

                case 0:
                    s = this.x + ': ' + this.y + 'Issues';
                    break;

                case 1:
                    s = this.x + ': ' + this.y + 'Issues';
                    break;
                }
                return s;
            }
        },
        series: [{
            name: name,
            level: level,
            data: data,
            color: colors[0]}],
        exporting: {
            enabled: false
        }
        },
        function(chart){
        console.log(chart);
    });
});
 });
    </script>
</head>
<body>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

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

</body>
</html>

请告诉我我做错了什么,因为原始线图在返回原始状态时不会显示。

1 个答案:

答案 0 :(得分:1)

您的代码中有两个主要的错误:在该行中:

setChart(name, categories1, data, null, level, 'line');

而不是null你应该使用任何颜色数组,同样适用于数据 - 应该是一个系列数组,工作代码示例:

setChart(name, categories1, [data], colors, level, 'line');
setChart(name, categories1, [data], ['blue','red','green'], level, 'line');

工作示例:http://jsfiddle.net/JaTjk/11/