为图形的Y轴选择一个有吸引力的线性刻度 - 更多

时间:2009-10-06 11:10:22

标签: algorithm math graph

继续:Choosing an attractive linear scale for a graph's Y Axis

  

当有些要点时该怎么办   是负面的吗?

我相信问题的这一部分没有得到解答,但似乎我无法发表评论或延伸这个问题,所以我创建了一个新问题

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 * round(-100/40)= -80
  6. 新上限= 40 * round(1 + 100/40)= 120
    1. 新下限= 40 * floor(-100/40)= -120
    2. 新上限= 40 * floor(1 + 100/40)= 120
    3. 现在范围已经增加到240(额外的刻度!),每个40个,每个40个刻度。 填补新范围需要6个步骤!

      解?

1 个答案:

答案 0 :(得分:0)

我使用以下代码。它为人类观察者提供了间隔很大的步骤,并满足了通过零的范围。

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;
    }
}