Асинхронная детализация Highcharts для нескольких уровней данных

#javascript #reactjs #typescript #asynchronous #highcharts

#javascript #reactjs #typescript #асинхронный #highcharts

Вопрос:

Настройка highchart, которая может вызывать API для нескольких уровней данных асинхронно. При щелчке по точкам данных я хочу, чтобы на верхней диаграмме отображался «addSeriesAsDrilldown», сохраняя при этом все события детализации и параметры диаграммы без изменений.

Это для набора данных с иерархической архитектурой. Например, если мне нужны 10 лучших R amp; B-хитов за май 2010 года, в моих данных сначала будут показаны точки данных, подобные этим: R amp; B

А затем щелкните точку данных 2010: R amp; B ^ 2010

И затем щелкните Может точка данных: R amp; B ^ 2010 ^ Может

Мы использовали addSeriesAsDrilldown, но это помогает нам только для первого уровня данных.

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

                    var chart = this,
                        drilldowns = {
                            'Animals': {
                                name: 'Animals',
                                data: [
                                    {name: 'Sheep',
                                     y:5,
                                     drilldown: true
                                   },
                                    ['Cow', 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
    },

    plotOptions: {
        series: {
            borderWidth: 0,
            dataLabels: {
                enabled: true
            }
        }
    },

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

    drilldown: {
        series: []
    }
});
  

Ожидаем, что в нашем выводе будут правильные данные по мере детализации без нарушения графика.

Комментарии:

1. Привет @Alec Breton, многоуровневая асинхронная детализация, похоже, работает должным образом. Пожалуйста, проверьте: jsfiddle.net/BlackLabel/8he1L7yu (Животные -> Автомобили).

2. @ppotaczek как бы данные добавлялись асинхронно при нажатии на элемент диаграммы? Просто добавлен атрибут детализации? Нужно ли это форматировать определенным образом?

3. Вам просто нужно использовать addSeriesAsDrilldown метод. Пожалуйста, проверьте этот пример: jsfiddle.net/BlackLabel/fg6aqn8w