2013-07-19 3 views
2

Использование flot charts Я хотел бы указать минимальное количество тиков для отображения по оси y. В моем случае я хотел бы всегда показывать по меньшей мере 10 тиков (значения 1-10), но если моя ось y max превышает 10, я хотел бы, чтобы флот рисовал диаграмму с ее обычным алгоритмом тика. В настоящее время у меня есть такая работа, указав функцию для параметра ticks paramater.Флот: показывать минимальное количество тиков

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, но флот ожидает возвращения массива. :(

+0

Что вы объяснили и что делает эта функция, противоречивы. Попробуйте удалить этот оператор 'else' и измените условие' if' на меньшее или меньшее значение, чем '' = = – Alexander

+0

@Alexander. Оператор else создаст массив тиков значений до 'axis.max', если я удалю его то у меня будет только отметка 1-10. Это не то, что я хочу. Я хочу, чтобы значения тика были до макс. Я просто не хочу их с шагом 1. Я хочу, чтобы флот использовал свой алгоритм по умолчанию, если это возможно. –

+1

Нет, это неправда. Если вы удалите его, он вернет пустой массив. Следовательно, инструкция 'else' находится в пути. Убери это. Что касается остальных, вам нужно добавить свойство динамически, если возврат 'null' не делает трюк – Alexander

ответ

4

Если вы хотите функциональность по умолчанию для генерации клеща можно вызвать tickGenerator функцию осей. Он намного чище, чем работать с фрагментом кода, который вы не поддерживаете. Поэтому в вашем случае вы можете сделать это:

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

Это именно то, что я искал! Спасибо! –

+0

идеальное решение! благодаря –

0

Я нашел this:

ticks: 16 

, но я не пробовал

+0

Спасибо за помощь, но не поймите с этим. Он округляется, если моя ось.max меньше 10. –

+0

Так что используйте его, когда 'max> 10' –

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; 
}, 
+0

Дух с моей стороны и потрясающий на твоем! –

+0

Спасибо :) На самом деле вы можете проверить, будет ли писать плагин вокруг processOptions-крючка более чистым вариантом для этого –

Смежные вопросы