如果我创建的列图的值大于0,但彼此的值比它们的值接近0,则生成的图表将具有几乎相同的列。看到这jsFiddle。计算高位图中的最小y轴值
但是,如果我将图表类型更改为一行,则生成的图表会更好,因为min yAxis值计算为非零值,因此图表上值的分布更加明显。
我可以手动设置min yAxis值,但是我需要这个值来处理任何一组数据,所以需要计算它。我怎么能为柱形图达到同样的效果?
如果我创建的列图的值大于0,但彼此的值比它们的值接近0,则生成的图表将具有几乎相同的列。看到这jsFiddle。计算高位图中的最小y轴值
但是,如果我将图表类型更改为一行,则生成的图表会更好,因为min yAxis值计算为非零值,因此图表上值的分布更加明显。
我可以手动设置min yAxis值,但是我需要这个值来处理任何一组数据,所以需要计算它。我怎么能为柱形图达到同样的效果?
我发现Highcharts计算折线图的最小值(至少对于线性轴)。它在getTickPositions()函数中。具体而言这些代码行:
// pad the values to get clear of the chart's edges
if (!categories && !usePercentage && !isLinked && defined(min) && defined(max)) {
length = (max - min) || 1;
if (!defined(options.min) && !defined(userMin) && minPadding && (dataMin < 0 || !ignoreMinPadding)) {
min -= length * minPadding;
}
if (!defined(options.max) && !defined(userMax) && maxPadding && (dataMax > 0 || !ignoreMaxPadding)) {
max += length * maxPadding;
}
}
所以它计算分钟作为
length = ([max data value] - [min data value]) || 1
min = [min data value] - length * minPadding
在Y轴为minPadding默认值是0.05所以
394.5 = 395 - ((405 - 395) * 0.05)
394.5创建蜱时是圆形的所以最终结果是390.
到目前为止我想出的是this。 (yAxis上的minPadding默认值似乎没有公开,所以我已经硬编码了它)
var data = [400,405,395];
Array.max = function(array){
return Math.max.apply(Math, array);
};
Array.min = function(array){
return Math.min.apply(Math, array);
};
var min = Array.min(data);
var max = Array.max(data);
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
defaultSeriesType: 'column'
},
yAxis: {
min: min - ((max-min) * 0.05)
},
series: [{
data: data
}]
});
尝试将Y轴的值,例如:
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
defaultSeriesType: 'column'
},
yAxis: {
min: 390,
startOnTick: false
},
series: [{
data: [400,405,395]
}]
});
您还可以将其设置为某种动态值在JavaScript(AVG(400,405,395) - 10%,例如),其应该给它足够的规模。
更新的JSFiddle是here。