继续:Choosing an attractive linear scale for a graph's Y Axis
当有些要点时该怎么办 是负面的吗?
我相信问题的这一部分没有得到解答,但似乎我无法发表评论或延伸这个问题,所以我创建了一个新问题
Values -100, 0, 100 with 5 ticks:
或
现在范围已经增加到240(额外的刻度!),每个40个,每个40个刻度。 填补新范围需要6个步骤!
解?
答案 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;
}
}