Highcharts Dynamic Drilldown с использованием json

Проблема с динамической детализацией. Не могу понять код для получения этих данных динамической детализации для этой диаграммы с использованием highcharts. Пожалуйста помоги

<script type="text/javascript">//<![CDATA[ 

$(function () {

    // Create the chart
    $('#container').highcharts({
        chart: {
            type: 'pie',
            events: {
                drilldown: function (e) {
                    if (!e.seriesOptions) {

                        var chart = this,
                            drilldowns = {
                                'Animals': {
                                    name: 'Animals',
                                    data: [
                                        ['Cows', 2],
                                        ['Sheep', 3]
                                    ]
                                },
                                'Fruits': {
                                    name: 'Fruits',
                                    data: [
                                        ['Apples', 5],
                                        ['Oranges', 7],
                                        ['Bananas', 2]
                                    ]
                                },
                                'Cars': {
                                    name: 'Cars',
                                    data: [
                                        ['Toyota', 1],
                                        ['Volkswagen', 2],
                                        ['Opel', 5]
                                    ]
                                }
                            },
                            series = drilldowns[e.point.name];

                        // Show the loading label
                        chart.showLoading('Simulating Ajax ...');

                        setTimeout(function () {
                            chart.hideLoading();
                            chart.addSeriesAsDrilldown(e.point, series);
                        }, 1000);
                    }

                }
            }
        },
        title: {
            text: 'Async drilldown'
        },
        xAxis: {
            type: 'category'
        },

        legend: {
            enabled: false
        },
        lang: {
            drillUpText: '<< Terug naar {series.name}'
        },
        plotOptions: {
            series: {
                borderWidth: 0,
                dataLabels: {
                    enabled: true
                }
            }
        },

        series: [{
            colorByPoint: true,
            data: [{
                name: 'Animals',
                y: 5,
                "drilldown": true
            }, {
                name: 'Fruits',
                y: 2,
                drilldown: true
            }, {
                name: 'Cars',
                y: 4,
                drilldown: true
            }]
        }],

        drilldown: {
            series: []
        }
    });
});

inside my series i already have a json data there for the name, y and for the value of the drilldown. having really hard time when it comes to the drilldown data inside 'Animals':{ name: 'Animals', data: ['Cows',2], ['Sheep', 3]]} . i need dynamic data for these please help help


person Nb12se    schedule 10.03.2015    source источник
comment
В чем суть проблемы? Насколько я понимаю, вам просто нужен вызов Ajax вместо drilldowns 2d-массива, за которым следует процедура загрузки, которая уже существует, но вместо этого в качестве обратного вызова успеха.   -  person Halvor Holsten Strand    schedule 10.03.2015
comment
массив json для этой части «Фрукты»: {название: «Фрукты», данные: [[«Яблоки», 5], [«Апельсины», 7], [«Бананы», 2]]},   -  person Nb12se    schedule 11.03.2015


Ответы (2)


Эта часть:

                if (!e.seriesOptions) {
                    var chart = this,
                        drilldowns = {
                            'Animals': {
                                name: 'Animals',
                                data: [
                                    ['Cows', 2],
                                    ['Sheep', 3]
                                ]
                            },
                            'Fruits': {
                                name: 'Fruits',
                                data: [
                                    ['Apples', 5],
                                    ['Oranges', 7],
                                    ['Bananas', 2]
                                ]
                            },
                            'Cars': {
                                name: 'Cars',
                                data: [
                                    ['Toyota', 1],
                                    ['Volkswagen', 2],
                                    ['Opel', 5]
                                ]
                            }
                        },
                        series = drilldowns[e.point.name];

                    // Show the loading label
                    chart.showLoading('Simulating Ajax ...');

                    setTimeout(function () {
                        chart.hideLoading();
                        chart.addSeriesAsDrilldown(e.point, series);
                    }, 1000);
                }

Это просто простой пример динамического добавления детализации. Вы можете использовать вызовы AJAX, как предлагается в комментарии:

                if (!e.seriesOptions) {
                    var chart = this,
                        series = drilldowns[e.point.name];

                    // Show the loading label
                    chart.showLoading('Loading...');

                    $.get('/my/url', e.point.name, function(data) {
                        chart.hideLoading();
                        chart.addSeriesAsDrilldown(e.point, data);
                        // where data is for example: 
                        // { name: 'Cars', data: [ ['Toyota', 1], ['Volkswagen', 2], ['Opel', 5] ] }
                    });
                }
person Paweł Fus    schedule 11.03.2015
comment
Привет @Pawel, не могли бы вы опубликовать пример в jsfiddle. - person Kannan K; 31.07.2018
comment
Для этого требуется внутренний сервер, я не знаю никакого решения (например, jsFiddle), которое обеспечивает такую ​​​​функциональность. Предлагаю взять демо из API: api.highcharts.com/highcharts/chart.events .развернуть - person Paweł Fus; 31.07.2018
comment
Спасибо @Pawel - person Kannan K; 31.07.2018

Надеюсь, это поможет кому-то еще. Вы могли бы, если хотите, хотя это не решает вашу проблему, но этот метод работает, разделите данные/json и вызовите данные с помощью ajax.

  var chartSeriesData = [];

  var chartDrilldownData = [];

$.ajax({
type: 'GET',
url: 'db/jsondata.json',
success: function(data) {


    var agentJson = data;

    for (var i = 0;i <agentJson.agentinfo.length; i++)

        {

        var series_name = agentJson.agentinfo[i].name;
        var drill_id = agentJson.agentinfo[i].drilldown;
        var series_data = agentJson.agentinfo[i].y;

        var drill_data = agentJson.agentinfo[i].data;


              chartSeriesData.push({
                 name: series_name,
                 y: parseFloat(series_data),
                 drilldown : drill_id                                     
              }); 


         chartDrilldownData.push({
             data : drill_data,
             id: drill_id,
             name: series_name,

         });


        }

    /// END FOR LOOP


    $('#agentInfo').highcharts({

        credits: {
            enabled: false
        },
        colors: ['#4B2572', '#8E227D', '#7904e0', '#b726b5', '#64E572', '#ed9cdf', '#f704ce', '#780a84', '#8e4696', '#cd92d3', '#551c5b'],
        chart: {
            type: 'pie',
            backgroundColor:'rgba(255, 255, 255, 0.1)'
        },
        title: {
            text: 'Human Resources'
        },

        subtitle: {
            text: ''
        },
        plotOptions: {
            series: {
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    format: '{point.name}: {point.y:.1f}%',
                    style: {
                        color: '#000',
                        fontWeight: 'bold',
                        fontSize: '12px',
                        textShadow: "0px #ffffff"

                     }
                }
            }
        },

        tooltip: {
            headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
            pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
        },
        series: [{
            name: 'Types',
            colorByPoint: true,
            data: chartSeriesData
        }],
        drilldown: {
             series: chartDrilldownData
            }
    });



}


});

И данные json будут структурированы следующим образом:

                {
                    "agentinfo": [
                  {
                    "name": "Attendance",
                    "y": 86.32,
                    "drilldown": "Attendance",
                                        "data": [
                                        ["January",  80.13],
                                        ["Febuary",  99.2],
                                        ["March",  78.11],
                                        ["April", 89.33]
                                    ]
                  },
                  {
                    "name": "Absence",
                    "y": 4.03,
                    "drilldown": "Absence",
                                        "data": [
                                        ["January", 1.3],
                                        ["Febuary", 5.7],
                                        ["March", 9.6],
                                        ["April", 8.5]
                                    ]
                  },
                  {
                    "name": "Holidays",
                    "y": 10.38,
                    "drilldown" : "Holidays",
                                        "data": [
                                        ["January", 5],
                                        ["Febuary", 4.32],
                                        ["March", 3.68],
                                        ["April", 2.96]
                                    ]
                  }
                ]

                }
person Steven Mcsorley    schedule 07.04.2016