解决 Highcharts 中 yAxis 的 max 设置无效的问题

问题场景

pic01

$(function () {
        Highcharts.chart('container', {
            title: {
                text: 'line'
            },
            xAxis: {
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            yAxis: {
                max: 350,
            },
            series: [{
                data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 250.4, 294.1, 95.6, 54.4]
            }]
        });
    });
  • 经过上图咱们能够发现,即便在 yAxis 中将 max 设置成了350,可是最终生成的图表仍然以400做为y轴的最大值

解决方案

  • 为了解决这个问题,咱们须要为 yAxis 同时添加 tickAmount(刻度总数) 属性

pic02

$(function () {
        Highcharts.chart('container', {
            title: {
                text: 'line'
            },
            xAxis: {
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            yAxis: {
                max: 350,
                tickAmount:8,
            },
            series: [{
                data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 250.4, 294.1, 95.6, 54.4]
            }]
        });
    });
  • 这样子就能看到正确的以350做为y轴最大值的结果了
  • 就目前的测试结果而言,max 所设置的最大值要可以被刻度线划分出来的间隔数以特定的值整除javascript

    • 以上面的例子而言 tickAmount 设置为8,划分出了7个格子,350 / 7 = 50 ,能够正确的显示
    • 在其余例子的测试中,整除成70或者90,也遇到过失效的状况
    • 因此仍是须要根据具体的 max 值来调整 tickAmount 的设置

解决方案2

  1. 还能够使用 tickPositioner 属性来手动设置坐标轴刻度

pic03

$(function () {
        Highcharts.chart('container', {
            title: {
                text: 'line'
            },
            xAxis: {
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            yAxis: {
                tickPositioner: function () {
                    var positions = [0,100,200,300,350];
                    return positions;
                }
            },
            series: [{
                data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 250.4, 294.1, 95.6, 54.4]
            }]
        });
    });
  1. 你也能够使用函数自动计算出合适的间隙

pic04

$(function () {
        $('#container').highcharts({
            title: {
                text: 'line'
            },
            xAxis: {
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            yAxis: {
                tickPositioner: function () {
                    var positions = [],
                        tick = Math.floor(this.dataMin),
                        increment = Math.ceil((this.dataMax - this.dataMin) / 6);
                    for (tick; tick - increment <= this.dataMax; tick += increment) {
                        positions.push(tick);
                    }
                    positions.push(350);
                    return positions;
                }
            },
            series: [{
                data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 250.4, 294.1, 95.6, 54.4]
            }],
        });
    });
  • 最后一个 350 为了与上方保持一致 push 进去的,使用时根据实际状况调整计算函数便可

参考

tickAmount API
tickPositioner APIjava

相关文章
相关标签/搜索