2

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

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 期望返回一个数组。:(

4

3 回答 3

4

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

ticks: function(axis){
   return axis.max < 10 ? [1,2,3,4,5,6,7,8,9,10] : axis.tickGenerator(axis); 
}
于 2013-07-19T17:27:19.570 回答
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;
}, 
于 2013-07-19T16:41:04.230 回答
0

我发现了这个

ticks: 16

但我还没有尝试过。

于 2013-07-19T16:14:11.103 回答