Изображение xAxis исчезает в Highcharts после первого обновления - PullRequest
0 голосов
/ 04 марта 2019

У меня есть страница с различными меню.Опции выбора используются в вызове ajax для построения гистограммы Highcharts.Каждый раз, когда меняется фильтр, график воссоздается.Я сделал это вместо обновления данных серии, потому что в прошлом я заметил, что уничтожение и воссоздание было более эффективным, чем обновление.

Я хочу, чтобы изображения отображались на оси х, поэтому я использовал немногохитрость создания двух осей x, использование средства форматирования для возврата изображения по первой оси и связывание второй оси с первой.Это работает при первом обновлении.Однако каждый раз, когда график воссоздается после этого, изображение исчезает.Я проверил свою консоль, и я не вижу никаких ошибок.

А идея, что здесь происходит?

 /**
 * Whenselection changes
 */
$(document).on('change', '.filter', function(){


     getChartData($params)
    })

});


/**
 * API call to get data that will populate charts.
 * @param {obj} params
 */
function getChartData(params)
{
    //Get chart data
    $.ajax({
        url: apiURL + '/chartdata/',
        data: params,
        dataType: 'json',
        cache: false,
        success: function(data) {

            initChart(data[0]);
       }
 });

function initChart(chartData)
{
    var chart = Highcharts.chart('container', {
        chart: {
            type: 'bar',
            backgroundColor: 'transparent', //#E8EAF6',
            height: '23%',
            marginLeft: 35
        },
        title: {
            text: null
        },
        xAxis: {
            categories: [category1, category2],
            lineColor: 'transparent',
            min: 0,
            tickColor: 'transparent',
            title: {
                text: null
            },
            labels: {
                x: -35,
                useHTML: true,
                overflow: 'allow',
                formatter: function () {
                    if(this.isFirst == true)
                        return '<img src="../assets/img/nat-jr-grad-gold.png"><br/>';
                    else
                        return '<img src="../assets/img/nat-jr-grad-purple.png"><br/>';

                }
            }
        },
        yAxis: {
            min: 0,
            title: {
                useHTML: true,
                text: null
            },
            labels: {
                enabled: false
            },
            lineWidth: 0,
            minorGridLineWidth: 0,
            gridLineWidth: 0,
            lineColor: 'transparent',
            gridLineColor: 'transparent',
        },
        legend: {
            enabled: false
        },
        series: [{
            name: category1,
            data: [{name: category1, y:Math.round(chartData.p_grad_nongap * 100), {y: null}],

        }, {
            name: category2,
            data: [null, {name: category2, y: Math.round(chartData.p_grad_gap * 100)}]
        }]
     });

}

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я думаю, что у ppotaczek была коренная причина проблемы;изображение загружается асинхронно, и диаграмма не учитывает его при расчете полей.В его предложении использовалась функция setTimeout для непрерывного перерисовывания графика, что довольно неэффективно.Мой обходной путь для этого состоял в том, чтобы просто добавить изображения как элементы avg, используя chart.renderer после создания диаграммы.

/* Render X-Axis images */
chart.renderer.image('../assets/img/img1.png', 0, 40, 32, 36)
    .css({
        class: 'icon-img',
        zIndex: 10
    })
    .add();

chart.renderer.image('../assets/img/img2.png', 0, 130, 32, 36)
    .css({
        class: 'icon-img',
        zIndex: 10
    })
    .add();
0 голосов
/ 05 марта 2019

Я воспроизвел вашу проблему на упрощенном примере: http://jsfiddle.net/BlackLabel/sm2r684n/

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

var img = new Image();
img.onload = function() {
    initChart();
}
img.src = "https://www.highcharts.com/samples/graphics/sun.png";

Демонстрационная версия: http://jsfiddle.net/BlackLabel/m09ok2cg/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...