Flot:显示最小数量的刻度

Flot: Show a minimum amount of ticks

本文关键字:小数 显示 Flot      更新时间:2023-09-26

使用flot图表,我想指定在y轴上显示的最小刻度。在我的情况下,我希望始终显示至少10个刻度(值1-10),但如果我的y轴最大值超过10,那么我希望flot使用其正常刻度算法绘制图表。我目前通过为ticks参数指定一个函数来实现它。

ticks: function(axis){
           var ticks = [];
           if(axis.max < 10){
                ticks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
           }
           else{
             for(var i = 1; i < axis.max; i++){
                 ticks.push(i);
             }
           }
           return ticks;
}, 

这样做的问题是,当axis.max大于10时,我得到的滴答声比我想要的要多得多。有办法避免这种情况吗?

我本来以为我可以返回null,但flot希望返回一个数组。:(

如果您想要刻度生成的默认功能,可以调用轴的tickGenerator函数。它比使用不维护的代码要干净得多。所以在你的情况下,你可以这样做:

ticks: function(axis){
   return axis.max < 10 ? [1,2,3,4,5,6,7,8,9,10] : axis.tickGenerator(axis); 
}

默认Flot算法似乎是这样的(参见setupTickGeneration函数:

noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? canvasWidth : canvasHeight);

所以也许类似的东西在这里会起作用(免责声明-没有真正测试过,不确定你是否在这个范围内拥有所有需要的变量,数学只是勾画出解决方案:

ticks: function(axis){
       var ticks = [];
       if(axis.max < 10){
            ticks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
       }
       else{
         noTicks = 0.3 * Math.sqrt(canvasHeight);
         interval = Math.round(axis.max / noTicks); 
         for(var i = 1; i <= noTicks; i++){
             ticks.push(i * interval);
         }
       }
       return ticks;
}, 

我发现了这个:

ticks: 16

但我还没试过。