2009-06-18 93 views
0

我有一个非常简单的图表组件,它在x/y轴上使用整数。我的问题是我需要在此图表上表示日期/浮点数。所以我尽管可以按比例分配比例日期。换句话说,假设我有以下日期:01/01/2008,02/01/2008和31/12/2008。该算法将返回0,16.667和100(1个月= 16.667%)。如何在Python中按比例分配比例日期

我试图玩datetimetimedelta类的Python 2.5,我无法做到这一点。我想我可以使用蜱的数量,但我甚至无法从datetime获得该信息。

任何想法如何我可以用Python写这个算法?否则,任何其他想法或算法?

+1

“无法实现这个”是什么意思?您有几天的时间可以提供基准日期的统一增量。这是最简单的方法。什么没有用?请提供具体的代码。 – 2009-06-18 00:33:36

回答

0

我不知道我是否完全理解你正在尝试做什么,但是你可以将时间作为自UNIX历元以来的秒数来处理,然后使用普通的旧的减法来获得可以缩放的范围到你的情节的大小。

在处理中,map函数将为您处理这种情况。 http://processing.org/reference/map_.html我相信你可以适应你的目的

1

把timedelta转换成数值是相当容易的。

选择一个新纪元时间。计算相对于时期的每个值的增量。将增量转换为数字值。然后像平常一样映射数字值。

转换非常简单。例如:

def f(delta): 
    return delta.seconds + delta.days * 1440 * 60 + 
     (delta.microseconds/1000000.0) 
3

如果您正在处理日期,那么您可以使用方法toordinal

import datetime 

jan1=datetime.datetime(2008,1,1) 
dec31=datetime.datetime(2008,12,31) 
feb1=datetime.datetime(2008,02,01) 

dates=[jan1,dec31,feb1] 
dates.sort() 

datesord=[d.toordinal() for d in dates] 
start,end=datesord[0],datesord[-1] 

def datetofloat(date,start,end): 
    """date,start,end are ordinal dates 
    ie Jan 1 of the year 1 has ordinal 1 
     Jan 1 of the year 2008 has ordinal 733042""" 
    return (date-start)*1.0/(end-start) 

print datetofloat(dates[0],start,end) 
    0.0 
print datetofloat(dates[1],start,end) 
    0.0849315068493* 
print datetofloat(dates[2],start,end) 
    1.0 

* 16.67%大概是一年的两个月,所以2月1日的比例约为一半。