在HighCharts系列中更改数据会导致y轴爆炸

时间:2011-11-22 13:47:56

标签: highcharts

我在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_value为224,000,则将新地图级别值设置为224,001会导致y_axis标度变为0到27500M。是的,这是275亿。

这可能是Highcharts中的错误吗?或者有更好的方法来更改系列中的数据吗?

我发布了一个小提琴:http://jsfiddle.net/earachefl/4FuNE/4/

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

这并不像我想的那样顺利。当您从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);                     
            }
        }
    }
}); });