2016-05-30 135 views
1

"Plotting a cumulative graph of python datetimes"提供了极大的方法来使用matplotlib绘制日期时间的列表(见下文)的累积计数随着时间的推移:情节和随着时间的推移

[ 
    datetime.datetime(2015, 12, 22), 
    datetime.datetime(2015, 12, 23), 
    datetime.datetime(2015, 12, 23), # note duplicate entry (graph increases by 2) 
    datetime.datetime(2015, 12, 24), 
    datetime.datetime(2015, 12, 25), 
    ... 
] 

不过,我有一个新的数据集,其中的每一项都有一个关联值(见下文)。我怎么能把这个作为一个积累?或者我只需要迭代数据并将其累积到x,y自己绘制对中?

[ 
    (datetime.datetime(2015, 12, 22), 6), # graph increases by 6 
    (datetime.datetime(2015, 12, 23), 5), 
    (datetime.datetime(2015, 12, 23), 4), # graph increases by 9 
    (datetime.datetime(2015, 12, 24), 12), 
    (datetime.datetime(2015, 12, 25), 14), 
] 

回答

3

所有你需要做的是分裂xy轴,然后用积累要么​​或np.add.accumulate y值。这里有一个例子:

import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
import datetime 
import numpy as np 

r = [(datetime.datetime(2015, 12, 22), 6), (datetime.datetime(2015, 12, 23), 5), (datetime.datetime(2015, 12, 23), 4), (datetime.datetime(2015, 12, 24), 12), (datetime.datetime(2015, 12, 25), 14)] 

x, v = zip(*[(d[0], d[1]) for d in r]) # same as #x , v = [d[0] for d in r], [d[1] for d in r] 
v = np.array(v).cumsum() # cumulative sum of y values 

# now plot the results 
fig, ax = plt.subplots(1) 
ax.plot(x, v, '-o') 
fig.autofmt_xdate() 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %d')) 
ax.xaxis.set_major_locator(mdates.DayLocator()) 
plt.show() 

Result as plotted by matplotlib

相关问题