Изменение данных в серии HighCharts приводит к взрыву оси Y - PullRequest
4 голосов
/ 22 ноября 2011

Я вижу странное поведение на линейном графике Highcharts. У меня отображается несколько рядов, и мне нужно позволить пользователю изменить то, что называется «Уровень карты» на графике, который представляет собой прямую линию во всех периодах времени. Предполагая, что правильный ряд

chart.series[i]

и что новый уровень, который я хочу установить, хранится в var newMapLevel, Я изменяю данные этой серии так:

data = chart.series[i].data;
for(j=0; j<data.length; j++){
    data[j].y = newMapLevel;                    
}
chart.series[i].setData(data);

Вызов этой функции дает желаемый эффект, ЕСЛИ БЕЗ нового уровня карты y_value ОДНО больше, чем самое высокое значение y_value всех других серий, в этом случае шкала оси Y взрывается. Другими словами, если шкала y_axis обычно составляет от 0 до 275 000, а наибольшее значение y_val из любой другой серии составляет, скажем, 224 000, установка нового значения уровня карты в 224 001 приводит к тому, что шкала y_axis становится от 0 до 27500M. Да, это 27,5 млрд.

Может ли это быть ошибкой в ​​Highcharts? Или есть лучший способ изменить данные в серии?

Я разместил скрипку: http://jsfiddle.net/earachefl/4FuNE/4/

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Я получил ответ от форума Highcharts:

http://highslide.com/forum/viewtopic.php?f=9&t=13594&p=59888#p59888

0 голосов
/ 24 ноября 2011

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

$(document).ready(function(){
$('#clickme').click(function(){      
    var newMapLevel = $('#newMAP').val();
    if(newMapLevel){
        for(i=0; i<chart.series.length; i++){
            if(chart.series[i].name == 'Map Level'){
                data = chart.series[i].data;
                for(j=0; j<data.length; j++){
                    data[j].y = newMapLevel;                    
                }

               // get the extremes
                var extremes = chart.yAxis[0].getExtremes(); 
                //alert("dataMin: " + extremes.dataMin);
                //alert("dataMax: " + extremes.dataMax);

                // define a max YAxis value to use when setting the extremes
                var myYMax = extremes.dataMax; 
                if (newMapLevel >= myYMax) {
                    myYMax = Number(newMapLevel) + 1; // number conversion required
                }

                if (myYMax > chart.yAxis[0].max) {
                    alert('cabbbie'); 
                    myYMax = chart.yAxis[0].max + 1; 
                }

                //alert("myYMax: " + myYMax);

                chart.yAxis[0].setExtremes(extremes.dataMin, myYMax)     

                 // finally, set the line data
                chart.series[i].setData(data);                     
            }
        }
    }
}); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...