我有这个代码,它有效;但是如果要求在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个刻度。绘制年份比数字更具信息量,但速度要慢得多。有什么建议如何加快速度?
答案 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)