Flot:显示最小量的刻度

时间:2013-07-19 16:08:02

标签: javascript jquery flot

使用flot charts我想指定在y轴上显示的最小刻度。在我的情况下,我想总是显示至少10个刻度(值1-10),但如果我的y轴max超过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期望返回一个数组。 :(

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

默认的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;
}, 

答案 2 :(得分:0)

我找到this

ticks: 16

但我还没试过。