我在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/
答案 0 :(得分:2)
我从Highcharts论坛得到了答案:
http://highslide.com/forum/viewtopic.php?f=9&t=13594&p=59888#p59888
答案 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);
}
}
}
}); });