首页 文章

如何在Highcharts中为轴设置静态最小值

提问于
浏览
8

我有基于时间的数据,范围从1到500.时间在x轴上绘制,值在y轴上 .

当最小和最大数据点之间的范围很大时,y轴的起始标签为0.我可以告诉Highcharts不要通过设置 yAxis.startOnTick = false; 来显示标签,但之后是's is not really what I'm .

Here is a jsfiddle问题,你无法判断第一个点是0还是其他一些值 . 这里0也看起来y的最小范围是0而不是1 .

Highcharts可以显示第一个标签,第一个标签应始终设置为数据集中的最小值(相对于其轴) .

2 回答

  • 3

    我很惊讶这是多么困难 . 不是最佳解决方案,但最好的I can dream up与HighChart的api:

    var someData = [1,5,82,9,300,5,42,199,5,6,99,1,56,52,250,64];
    
    var chart = new Highcharts.Chart({
    
        chart: {
            renderTo: 'container'
        },
        yAxis:{
            min: -10,
            tickInterval: 1,
            labels: {
                formatter: function() {
                    if (this.value < someData[0])
                        return null;
                    else if (this.value == someData[0])
                        return this.value;
                    else if (this.value % 50 == 0)
                        return this.value;
                }
            }
        },
        series: [{
            data: someData
        }]
    
    });
    

    enter image description here

  • 10

    一个解决方案(优化Marks answer)是使用 yAxis.labels.formatterthis.isFirstthis.axis.dataMin ,如下所示:

    yAxis:{
        labels: {
            formatter: function() {
                if(this.isFirst)
                    return this.axis.dataMin;
                return this.value;
            }
        }
    }
    

    有关示例,请参阅this JSFiddle demo .

    这样做的好处是您不必手动设置 tickInterval ,这可以节省大量的 formatter 调用,并让Highcharts自己找出标签间隔 . 此外,它使用最小数据值的轴知识,而不必检查数组(您可能必须迭代以找到最小值) .

    请注意 yAxis.min 必须设置为合理的东西(最适合 0 和正数据) . 如果y轴远远低于最小数据点,则第一个标签将不是0处的标签 .

    询问此问题时, this.axis 值不可用 .

相关问题