Как я могу автоматически рассчитать масштаб оси и интервалы? - PullRequest
8 голосов
/ 25 октября 2008

Кто-нибудь знает, где я могу найти алгоритм, который дает набор значений (дат) для оси, где я могу рассчитать разумный масштаб и интервал между тиками?

Ответы [ 2 ]

6 голосов
/ 25 октября 2008

Тиковый интервал будет зависеть от вашей области отображения. Вам нужно будет принять во внимание ширину вашего графика (я предполагаю, что время на оси X) и ширину строки даты в выбранном вами шрифте, чтобы получить хороший масштаб.

Базовый алгоритм будет выглядеть примерно так.

  • Сканирование списка дат, чтобы найти минимальное и максимальное значения.
  • Разделите ширину графика на ширину строки даты (это можно сделать один раз, сохраняя результат в переменной, если * обе * ширины постоянны). Этот шаг будет проще, если вы используете шрифт фиксированной ширины и формат даты MM-DD-YYYY. Если вы используете шрифт переменной ширины и формат даты, в котором прописано название месяца, вам нужно добавить дополнительный отступ в строку, чтобы каждая строка даты имела одинаковую ширину. Обратите внимание, что я сказал * дополнительные * отступы. Даже если вы используете фиксированный формат даты, вам нужно заполнить его хотя бы одним пробелом, чтобы избежать переполнения. Я назову это значение `ticks`, потому что именно столько тиков на вашей оси будет соответствовать в зависимости от ширины вашего графика.
  • Подсчитайте, сколько дней проходит между минимальной и максимальной датами (включительно). Как вы это сделаете, будет зависеть от того, какой язык вы используете. Надеюсь, у вас есть хорошие реализации Date и Calendar. Я просто назову это значение `days`.
  • Рассчитать интервал между тиками по формуле `interval = days / (ticks - 1)`.
  • Определите, какие дни попадают в интервалы между тиками, добавляя `interval` к вашей минимальной дате, пока вы не достигнете своей максимальной даты. Опять же, это будет зависеть от того, какой язык вы используете.
1 голос
/ 27 октября 2008

Я использую библиотеку графов jQuery flot . Это открытый исходный код и довольно хорошо выполняет генерацию осей / тиков. Я бы посоветовал взглянуть на его код и оттуда извлечь некоторые идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...