Highcharts – 在对数Y轴的折线图系列中处理和显示零(或负)值的最佳方法

在我的HighChart折线图中,系列数据是从我的Ruby on Rails应用程序动态提供的。 有时系列值为零或更小,这是HighCharts的一个问题,它会抛出以下exception:

Highcharts Error #10 Can't plot zero or subzero values on a logarithmic axis 

因此,作为解决方法,我处理我的ruby数组以有条件地将一个较小值的零替换为无效的正数,.eg 0.00001,如下所示:

 oil_vol_array = d_array[1].map { |e| (e < 0.0001) ? 0.0001 : e.round(3) } 

这可以防止抛出exception,但是如果起始值为零,显示屏将显示从0.0001开始的图形(可以理解的是,因为我要求它)。 更理想的显示是将图形设置为零,但HighChart不喜欢它:(

有没有办法实现这一目标?

您是否尝试过使用标签格式化程序 ?

 var chart = new Highcharts.Chart({ yAxis: { labels: { formatter: function() { if(this.value === 0.00001){ return 0; } else { return this.value; } } } } }); 

在处理大量数字时,最好使用标准格式化器来表示0以外的值,否则您的标签将显示如下:1000000000 …要更改此项,请将’else’语句替换为对原始标签格式化程序方法的调用下面:

 var chart = new Highcharts.Chart({ yAxis: { labels: { formatter: function() { if(this.value === 0.00001){ return 0; } else { return Highcharts.Axis.prototype.defaultLabelFormatter.call(this); } } } } });