以下几行:
import Quandl
import datetime
import matplotlib.pyplot as plt
# Import data from Quandl
DJI = Quandl.get("WREN/W6", trim_start="1980-01-01", trim_end= datetime.date.today())
'''
type(DJI) => class 'pandas.core.frame.DataFrame'
'''
# Plot DJI
DJI.plot()
plt.show()
制作此图表:
如何设置主要单元,以便从系列的开头到结尾每年只读取一次?
可能使用MultipleLocator和FormatStrFormatter函数?但是如何使用日期?我的时间序列的长度各不相同。
答案 0 :(得分:2)
您可以使用matplotlib的dates
模块中的YearLocator
。
from matplotlib.dates import YearLocator, DateFormatter
...
# YearLocator defaults to a locator at 1st of January every year
plt.gca().xaxis.set_major_locator(YearLocator())
plt.gca().xaxis.set_major_formatter(DateFormatter('%Y'))
答案 1 :(得分:2)
您需要实际调用plt.plot
(或使用matplotlib
API),因为matplotlib无法在x轴上正确呈现datetime64
数组。例如:
In [18]: s = Series(randn(10), index=date_range('1/1/2001', '1/1/2011', freq='A'))
In [19]: s
Out[19]:
2001-12-31 -1.236
2002-12-31 0.234
2003-12-31 -0.858
2004-12-31 -0.472
2005-12-31 1.186
2006-12-31 1.476
2007-12-31 0.212
2008-12-31 0.854
2009-12-31 -0.697
2010-12-31 -1.241
Freq: A-DEC, dtype: float64
In [22]: ax = s.plot()
In [23]: ax.xaxis.set_major_locator(YearLocator())
In [24]: ax.xaxis.set_major_formatter(DateFormatter('%Y'))
给出
相反,你应该做类似的事情:
fig, ax = subplots()
ax.plot(s.index.to_pydatetime(), s.values)
ax.xaxis.set_major_locator(YearLocator())
ax.xaxis.set_major_formatter(DateFormatter('%Y'))
fig.autofmt_xdate()
得到:
如果您想要不同的年份倍数,请将您想要的倍数传递给YearLocator
构造函数,如下所示:
fig, ax = subplots()
ax.plot(s.index.to_pydatetime(), s.values)
ax.xaxis.set_major_locator(YearLocator(2))
ax.xaxis.set_major_formatter(DateFormatter('%Y'))
fig.autofmt_xdate()
导致: