Выбор привлекательной линейной шкалы для оси Y графика - больше - PullRequest
1 голос
/ 06 октября 2009

Далее: Выбор привлекательной линейной шкалы для оси Y графика

А что делать, когда некоторые из пунктов отрицательны?

Я считаю, что на эту часть вопроса не было ответа, но, похоже, я не могу комментировать или расширить этот вопрос, поэтому я создал новый

Values -100, 0, 100 with 5 ticks:
  1. нижняя граница = -100
  2. верхняя граница = 100
  3. диапазон = 100--100 = 200
  4. диапазон тиков = 40
    1. Делим на 10 ^ 2 для 0,4, переводим в 0,4, что дает (умноженное на 10 ^ 2) 40.
  5. новая нижняя граница = 40 * раунд (-100/40) = -80
  6. новая верхняя граница = 40 * раунд (1 + 100/40) = 120

или

  1. новая нижняя граница = 40 * этаж (-100/40) = -120
  2. новая верхняя граница = 40 * этаж (1 + 100/40) = 120

Теперь диапазон увеличен до 240 (дополнительный тик!) С 5 тиками по 40 каждый. для заполнения нового диапазона потребуется 6 шагов!

Решение

1 Ответ

0 голосов
/ 06 октября 2009

Я использую следующий код. Он производит хорошо разнесенные шаги для зрителей и обслуживает диапазоны, которые проходят через ноль.

public static class AxisUtil
{
    public static float CalculateStepSize(float range, float targetSteps)
    {
        // calculate an initial guess at step size
        float tempStep = range/targetSteps;

        // get the magnitude of the step size
        float mag = (float)Math.Floor(Math.Log10(tempStep));
        float magPow = (float)Math.Pow(10, mag);

        // calculate most significant digit of the new step size
        float magMsd = (int)(tempStep/magPow + 0.5);

        // promote the MSD to either 1, 2, or 5
        if (magMsd > 5.0)
            magMsd = 10.0f;
        else if (magMsd > 2.0)
            magMsd = 5.0f;
        else if (magMsd > 1.0)
            magMsd = 2.0f;

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