我想在y轴上显示三个标签:min
,middle
和max
。 max - min = 9572。
查找中间的最简单方法是9572/2 = 4786.这些值不太好,因此Excel可能会将间隔增加到1000并将middle
设置为500。
在给出min
和max
时,如何计算y轴的漂亮值? min
和/或max
可能是否定的。
答案 0 :(得分:2)
好问题!最近我解决了类似的问题和我所做的事情:
为min标签选择好看的起点。取实际最小值,除以所选步长(5000)。舍入结果(您可以使用floor
作为最小值,ceil
作为最大值)并将其乘以所选步骤。例如,如果min = -3400且max = 2700:
scaleMin = floor(-3400 / 5000)* 5000 = -5000
scaleMax = ceil(2700/5000)* 5000 = 5000
这将给出三个标签:-5000,0和5000.如果你可以容忍y轴低于图形最大值的最后一个标记,不要只使用ceil(或floor)。计算图表最大值百分比是否超出标记,如果太多,则添加一步。
答案 1 :(得分:0)
可能有助于在C#中提供实现。我的样本可能不适用于负y轴值。希望它可以帮到某人!
private double GetMajorStep(double yAxisMax)
{
int[] stepArray = {1, 2, 5, 10, 20, 25, 50, 75, 100, 200, 250, 500, 750, 1000, 2000, 2500, 5000, 7500, 10000, 20000, 50000,100000, 500000,1000000};
const int numLabels = 2;
var stepSize = (int) (yAxisMax/(numLabels - 1));
var possibleSteps = stepArray.Where(p => p < stepSize).ToList();
if (!possibleSteps.Any()) return stepSize;
var nearest = possibleSteps.OrderBy(x => Math.Abs((long)x - stepSize)).First();
return nearest;
}