我想在y軸上顯示三個標籤:min
,middle
和max
。最大 - 最小= 9572. 找到中間的最簡單的方法是二分之九千五百七十二= 4786.這些值不是很好所以Excel中可能會增加間隔1000,並設置middle
爲500如何計算數值軸的主要單位
如何計算nice值對於我的y軸當min
和max
給出? min
和/或max
可能是負面的。
我想在y軸上顯示三個標籤:min
,middle
和max
。最大 - 最小= 9572. 找到中間的最簡單的方法是二分之九千五百七十二= 4786.這些值不是很好所以Excel中可能會增加間隔1000,並設置middle
爲500如何計算數值軸的主要單位
如何計算nice值對於我的y軸當min
和max
給出? min
和/或max
可能是負面的。
好問題!最近,我最近解決了類似的問題,我做了什麼:
爲最小標籤選擇好看的起點。把你的實際最小值除以選定的步驟(5000)。舍入結果(您可以使用floor
作爲最小值,ceil
作爲最大值)並將其乘以所選步驟。例如,如果最小= -3400和max = 2700:
scaleMin =地板(-3400/5000)* 5000 = -5000
scaleMax =小區(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;
}