2011-09-27 152 views
0

我正在嘗試複製「正確」的Excel感覺如何計算折線圖的Y軸邊界。計算線形圖的最小/最大Y軸值

作爲一個例子,我們假設我目前有一個有三個數據點的圖表。 (0,100),(1,500),(2,930)。

簡單的代碼我現在已經將Y軸最小值設置爲100,將Y軸最大值設置爲930.這個想法是爲了防止沒有0值的數據集傾斜圖表大小。這有效,但我覺得它可能會好得多。

對於上面的示例,Excel繪製範圍從0到1000的數據點。我試圖創建一個繪製相同「感覺良好」範圍的通用算法。然而,事實證明它有點棘手。

我覺得我需要的信息的幾個要點:

  • 幅度爲上下值的順序(10個功率)。
  • 總是採取數據點的上限/下限 - 當數據點與繪製的最大/最小範圍數據點共享相同的值時,並不十分清楚。

從那裏我有點虧了。

如果我參加930的最大數據點值,我知道它的量級是3。因此,我添加了一個到它的最大值和零其餘的 - 導致1000

如果我走1030作爲最大數據點值,我知道它的數量級是4.如果我將一個增加到最大值,其餘爲零,結果爲2000.當繪圖時(0,100),Excel繪製1200作爲最大範圍1,500),(2,930),(3,1030)。

這個問題在較大的值時會迅速降低 - 它總是增加最大值,但它有時並不完全正確。有沒有人有過這方面的經驗,可以幫助我們更好地瞭解更好的方法?

回答

1

爲什麼不只是有來自像去的範圍:

(1-padding) * minimum_value // minimum > 0 
(1+padding) * minimum_value // minimum < 0 

(1+padding) * maximum_value // maximum > 0 
(1-padding) * maximum_value // maximum < 0 

其中padding01,例如之間的數0.05

+1

讓我玩這個了一點。我認爲我對這種方法的主要擔憂是沒有堅定的保證,即間隔將是「乾淨的」。舍入/最多可以提供更直觀的步驟。啊,只要有點按摩數據,我就可以防止這種情況發生。真棒。比我預想的要簡單得多。謝謝。 –

2

甲相當健壯的方法如下:

  • 取範圍r = max - min
  • 假設大約一個填充。百分之五(如果必要的話調整圖),pad = r * 0.05
  • pad直到下一個(1,2,5)*10^n(例如0.23將被舍入到0.55.5將被向上舍入到10)。
  • 採取axis_min = floor(min/pad-1)*pad
  • 採取axis_max = ceil(max/pad+1)*pad