2012-01-05 71 views
2

我想基於數據集中的最大值自動設置線圖上的垂直比例。到目前爲止,我想出了這種方法:根據最大值自動設置圖表上的比例(Python)

if 0 < max and max <= 250: 
    ymax = 250 
elif 250 < max and max <= 500: 
    ymax = 500 
elif 500 < max and max <= 750: 
    ymax = 750 
elif 750 < max and max <= 1000: 
    ymax = 1000 

任何人都可以推薦一個更簡潔的方法?

回答

2

另一個不那麼直觀的實現

def vScale(xmax): 
    return ((xmax-1)/250+1)*250 

這裏是結果

[(x,vScale(x)) for x in xrange(0,1200,50)] 

[(0, 0), (50, 250), (100, 250), (150, 250), (200, 250), (250, 250), (300, 500), (350, 500), (400, 500), (450, 500), (500, 500), (550, 750), (600, 750), (650, 750), (700, 750), (750, 750), (800, 1000), (850, 1000), (900, 1000), (950, 1000), (1000, 1000), (1050, 1250), (1100, 1250), (1150, 1250)]

而且又實現

limits=[0,250,500,750,1000] 
ymax=limits[bisect.bisect_right(limits,xmax-1)] 

一個更添加到花束

def vScale(xmax): 
    return [250,500,750,1000][(xmax-1)/250] 
+0

+1這個作品!比我的簡潔! :d – 2012-01-05 15:26:37

0

請不要調用變量max,這是內置函數。

if 0 < xmax <= 250: 
    ymax = 250 
elif xmax <= 500: 
    ymax = 500 
elif xmax <= 750: 
    ymax = 750 
elif xmax <= 1000: 
    ymax = 1000 

注意,Python允許的形式x < y < z的比較與意義x < y and y < z

0

您可以簡化它仍然更多:

if mymax < 250: 
    ymax = 250 
elif mymax < 500: 
    ymax = 500 
elif mymax < 750: 
    ymax = 750 
else: 
    ymax = 1000 

,並在一個更通用的方法:

>>> mymax = 633 
>>> limits = [250, 500, 750, 1000] 
>>> for m in limits: 
...  if mymax < m: 
...   ymax = m 
...   break 
...   
>>> ymax 
750 
>>> 
0

以下是相當簡潔:

min(th for th in (250, 500, 750, 1000) if val <= th) 

其中val是變量你打電話max(我已經改名了,以避免影響內置)。

(250, 500, 750, 1000)可以替換爲任何可迭代的(甚至是一個生成器)。

0

你可以使用一個for循環:

for i in range(4): 
    if 250*i < max <= 250*(i+1): 
     max = 250*(i+1) 
     break 

(儘管與他人同意,變量可能不應該叫 「MAX」)

相關問題