Расчет значений Min / Max Y-Axis для линейного графика - PullRequest
1 голос
/ 27 сентября 2011

Я пытаюсь повторить, как «правильный» Excel чувствует себя в отношении расчета границ оси Y для линейного графика.

В качестве примера, давайте предположим, что у меня в настоящее время есть диаграмма с тремя точками данных на нем,(0, 100), (1500), (2930).

В упрощенном коде, который у меня есть, устанавливается минимальное значение оси Y на 100, а максимальное значение оси Y на 930. Идея состояла в том, чтобы предотвратитьнаборы данных, которые не имеют 0 значений из-за искажения размера диаграммы.Это работает, но я чувствую, что это могло бы быть намного лучше.

Для приведенного выше примера Excel отображает точки данных в диапазоне от 0 до 1000. Я пытаюсь создать общий алгоритм построения того же «чувствую себя хорошо»спектр.Это оказывается немного хитрым, однако.

Я чувствую, что мне нужно несколько пунктов информации:

  • Порядок величины для верхнего и нижнего значений (степень 10).
  • Всегда принимайте верхний / нижний предел точки данных - не очень ясно, когда точка данных имеет то же значение, что и максимальный / минимальный диапазон, нанесенный на график.

Оттам я немного растерялся.

Если я беру 930 в качестве максимального значения точки данных, я знаю, что его порядок равен 3. Итак, я добавляю один к его наибольшему значению и обнуляю остальные- в результате получается 1000.

Если я беру 1030 в качестве максимального значения точки данных, я знаю, что его порядок равен 4. Если я добавлю единицу к ее наибольшему значению и обнулю остальное, результат будет 2000. Excelотображает 1200 как максимальный диапазон при построении графика (0, 100), (1500), (2930), (3,1030).

Эта проблема быстро ухудшается при больших значениях - просто не совсем правильно всегда увеличивать наибольшее значение, но иногда это так.У кого-нибудь есть опыт, который мог бы пролить свет на лучший подход?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Довольно надежный подход заключается в следующем:

  • принять диапазон r = max - min
  • допускается заполнение ок. пять процентов (при необходимости измените цифру), pad = r * 0.05
  • округление pad до следующего (1,2,5)*10^n (например, 0.23 будет округлено до 0.5, а 5.5 будет округлено до 10).
  • дубль axis_min = floor(min/pad-1)*pad
  • дубль axis_max = ceil(max/pad+1)*pad
1 голос
/ 27 сентября 2011

Почему бы просто не изменить диапазон, например:

(1-padding) * minimum_value // minimum > 0
(1+padding) * minimum_value // minimum < 0

до

(1+padding) * maximum_value // maximum > 0
(1-padding) * maximum_value // maximum < 0

, где padding - это число от 0 до 1, например, 0.05.

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