Автоматическая настройка масштаба на графике на основе максимального значения (Python) - PullRequest
2 голосов
/ 05 января 2012

Я хочу автоматически установить вертикальный масштаб на линейном графике, основываясь на максимальном значении в наборе данных.До сих пор я придумал этот метод:

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

Может ли кто-нибудь порекомендовать более краткий подход?

Ответы [ 6 ]

2 голосов
/ 05 января 2012

еще одна не очень интуитивная реализация

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 голосов
0 голосов
/ 05 января 2012

Вы можете использовать цикл for:

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

(хотя согласен с другими, что переменную, вероятно, не следует называть "max")

0 голосов
/ 05 января 2012

Следующее довольно лаконично:

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

, где val - это переменная, которую вы называете max (я переименовал ее, чтобы избежать затенения встроенной функции).

(250, 500, 750, 1000) может быть заменено любым итератором (или даже генератором).

0 голосов
/ 05 января 2012

Вы можете упростить это еще больше:

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 голосов
/ 05 января 2012

Пожалуйста, не вызывайте переменную 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.

...