加快在matplotlib中绘制日期

时间:2015-05-06 18:59:13

标签: performance date matplotlib

我有这个代码,它有效;但是如果要求在x轴上使用日期而不是数字,python需要很长时间。

prices_list = [eval(price_line[x]) for x in range(0, len(price_line))]  # 
xs = [n for n in range(0,len(prices_list))]
y_but, yf= fltflt(xs, prices_list)
ddo = [datetime.strptime(dtes[x], "%Y-%m-%d").date() for x in range(0, len(dtes))]
date1 = ddo[0] 
date2 = ddo[len(ddo) - 1] 
ax1 = pl.subplot(1,1,1)
ax1.plot(ddo,prices_list, 'b')
ax1.grid(True)
ax1.plot(ddo,yf, 'r') 
pl.xticks(ddo,rotation=45)
ax1.set_xlim( [date1, date2] )
ax1.set_ylim([min(prices_list), max(prices_list)])
pl.title(epics[e])
pl.show()

x数据跨越5到10年,有1500 - 3000个日期。我只想绘制年份,所以只需要5到10个刻度。绘制年份比数字更具信息量,但速度要慢得多。有什么建议如何加快速度?

1 个答案:

答案 0 :(得分:0)

您可以使用带有最大倒数的matplotlib.dates.AutoDateLocator,或使用带有基数倍的matplotlib.dates.YearLocator(每5年打一次,每1000打一次,无论如何)。最复杂的版本是RRuleLocator,它提供复杂的日历控制。

参见RRule的example;一般原则是

1)指定locator,formatter

loc = matplotlib.dates.RRuleLocator(rule)
formatter = matplotlib.dates.DateFormatter('%m/%d/%y')

2)制作一个轴并使用定位器,格式化程序

ax.xaxis.set_major_locator(loc)
ax.xaxis.set_major_formatter(formatter)