2013-06-25 154 views
9

首先,对帖子标题表示歉意,但是我没有提出一个更好的描述我的问题。Highcharts - 为yAxis设置最大范围,但保持轴的动态范围

有没有办法在highcharts中将yAxis的最大值设置为1000(即通过max: 1000),但如果最大值低于设定的最大值,则保持动态?举一个例子,假设我们有两个数据集。

第一个范围在0到1500之间。这里不应显示任何大于1000的数据。设置yAxis: { max: 1000 }会诀窍。

现在我们用第二个数据集更新数据系列,其范围介于0到48之间。现在,max: 1000使线条虚拟拥抱x轴。因此,如果Highcharts动态调整yAxis的范围为0-50,那么这里最好。

这里有一个小提琴来说明这个问题:http://jsfiddle.net/PanicJ/s7fZu/1/

附: 刚刚注意到了Highcharts中的minRange设置。现在,为什么没有相应的maxRange?或者在那里?

+0

有没有像没有这样的选择'maxRange',您可以创建要求[这里](http://highcharts.uservoice.com/forums/55896-general) –

回答

5

似乎没有maxRange当量(功能要求,托尔斯泰?),这样Highcharts被调用之前确定的轴最大了。在Sanath的建议,建立一个解决办法是这样的:

$(function() { 
    var setA = [29.9, 11.5, 36.4, 19.2, 4.0, 46.0, 48.2, 15.2, 16.4, 4.1, 5.6, 44.4]; 
    var setB = [129.2, 144.0, 176.0, 135.6, 248.5, 316.4, 694.1, 795.6, 954.4, 1029.9, 1171.5, 1506.4]; 
    var data = Math.random() < 0.5 ? setA : setB; 
    var height=Math.max.apply(Math, data); 
    if(height > 1000){ height = 1000; } 

    $('#container').highcharts({ 
     chart: { 
      marginRight: 80 // like left 
     }, 
     xAxis: { 
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
     }, 
     yAxis: [{ 
      lineWidth: 1, 
      max: height, 
      min: 0, 
      title: { text: 'yAxis' } 
     }], 
     series: [{ 
      data: data 
     }] 
    }); 
}); 

作为工作示例:http://jsfiddle.net/PanicJ/H2pyC/8/

3

请使用

setExtremes to define a range. The JSfiddle has been updated. 

$('#button').click(function() { 
    var chart = $('#container').highcharts(

    ); 
    if ($(this).hasClass('big')) { 
     $(this).removeClass('big'); 
     chart.series[0].setData([29.9, 11.5, 36.4, 19.2, 4.0, 46.0, 48.2, 15.2, 16.4, 4.1, 5.6, 44.4]); 
     //chart.setSize(null,100,true); 
     chart.yAxis[0].setExtremes(0,50); 
    } else { 
     $(this).addClass('big'); 
     chart.series[0].setData([129.2, 144.0, 176.0, 135.6, 248.5, 316.4, 694.1, 795.6, 954.4, 1029.9, 1171.5, 1506.4]); 
     //chart.setSize(null,1600,true); 
     chart.yAxis[0].setExtremes(0,1600); 
    } 
    }); 
}); 
+1

,那么你必须基于Y轴最大值来计算可用的设定值和填充 Y轴:[{ 的lineWidth:1, 最大:CALCULATED_MAXVALUE, – Sanath

+1

检查的jsfiddle为conditinally更新的高度 – Sanath

+0

好吧,谢谢。那么这意味着在Highcharts中没有'maxRange'相当于,那么? – Tomm

1

Updated jsfiddle

$(function() { 
    $('#container').highcharts({ 
     chart: { 
      marginRight: 80 // like left 
     }, 
     xAxis: { 
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
     }, 
     yAxis: [{ 
      lineWidth: 1, 
      max: 1000, 
      min: 0, 
      title: { 
       text: 'Primary Axis' 
      } 
     }, { 
      lineWidth: 1, 
      opposite: true, 
      title: { 
       text: 'Secondary Axis' 
      } 
     }], 
     series: [{ 
      data: [29.9, 11.5, 36.4, 19.2, 4.0, 46.0, 48.2, 15.2, 16.4, 4.1, 5.6, 44.4] 
     }] 
    }); 
    $('#button').click(function() { 
     var chart = $('#container').highcharts(); 
     if ($(this).hasClass('big')) { 
      $(this).removeClass('big'); 
      chart.series[0].setData([29.9, 11.5, 36.4, 19.2, 4.0, 46.0, 48.2, 15.2, 16.4, 4.1, 5.6, 44.4]); 
      chart.yAxis[0].setExtremes(0, 50); 
     } else { 
      $(this).addClass('big'); 
      chart.series[0].setData([129.2, 144.0, 176.0, 135.6, 248.5, 316.4, 694.1, 795.6, 954.4, 1029.9, 1171.5, 1506.4]); 
      chart.yAxis[0].setExtremes(0, 1600); 
     } 
    }); 
}); 

这个解决方案应该为你工作,你只需要设置y轴的极限图表,如果您知道每个系列的最大数据范围,那么很容易,否则您需要计算每个系列的最大值。

0

自Highcharts 4.0以来,我们可以使用yAxis.ceilingyAxis.floor,demo

Highcharts.chart('container1', { 
    yAxis: { 
    floor: 0, 
    ceiling: 100 
    }, 
    series: [{ 
    data: [-10, 1, 0, 2, 3, 5, 8, 5, 15, 14, 25, 154] 
    }] 
});