我想在 y 轴上显示三个标签min
:middle
和max
。最大值 - 最小值 = 9572。找到中间值的最简单方法是 9572 / 2 = 4786。这些值不太好,因此 Excel 可能会将间隔增加到 1000 并设置middle
为 500。
min
当和被给定时,我如何为我的 y 轴计算好的值max
? min
和/或max
可能是负面的。
我想在 y 轴上显示三个标签min
:middle
和max
。最大值 - 最小值 = 9572。找到中间值的最简单方法是 9572 / 2 = 4786。这些值不太好,因此 Excel 可能会将间隔增加到 1000 并设置middle
为 500。
min
当和被给定时,我如何为我的 y 轴计算好的值max
? min
和/或max
可能是负面的。
好问题!最近我最近解决了类似的问题,我做了什么:
为最小标签选择好看的起点。取您的实际最小值,除以所选步长 (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)。计算图表最大值偏离标记的百分比,如果太多则添加一个步骤。
可能有助于在 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;
}