时间序列绘图
pandas时间序列的绘图功能在日期格式化方面比matplotlib原生的要好。来看下面这个例子,我先从Yahoo!Finance下载了几只美国股票的一些价格数据:
- In [539]: close_px_all = pd.read_csv('ch09/stock_px.csv', parse_dates=True, index_col=0)
- In [540]: close_px = close_px_all[['AAPL', 'MSFT', 'XOM']]
- In [541]: close_px = close_px.resample('B', fill_method='ffill')
- In [542]: close_px
- Out[542]:
- <class 'pandas.core.frame.DataFrame'>
- DatetimeIndex: 2292 entries, 2003-01-02 00:00:00 to 2011-10-14 00:00:00
- Freq: B
- Data columns:
- AAPL 2292 non-null values
- MSFT 2292 non-null values
- XOM 2292 non-null values
- dtypes: float64(3)
对其中任意一列调用plot即可生成一张简单的图表,如图10-4所示。
- In [544]: close_px['AAPL'].plot()
图10-4:AAPL每日价格
当对DataFrame调用plot时,所有时间序列都会被绘制在一个subplot上,并有一个图例说明哪个是哪个。这里我只绘制了2009年的数据,如图10-5所示,月份和年度都被格式化到了X轴上。
- In [546]: close_px.ix['2009'].plot()
图10-5:2009年的股票价格
图10-6:苹果公司在2011年1月到3月间的每日股价
图10-6展示了苹果公司在2011年1月到3月间的每日股价。
- In [548]: close_px['AAPL'].ix['01-2011':'03-2011'].plot()
季度型频率的数据会用季度标记进行格式化,这种事情如果纯手工做的话那是很费精力的。如图10-7所示。
- In [550]: appl_q = close_px['AAPL'].resample('Q-DEC', fill_method='ffill')
- In [551]: appl_q.ix['2009':].plot()
pandas时间序列在绘图方面还有一个特点:当右键点击译注7并拖拉(放大、缩小)时,日期会动态展开或收缩,且绘图窗口中的时间区间会被重新格式化。当然,只有在交互模式下使用matplotlib才会有此效果。
图10-7:苹果公司在2009年到2011年间的每季度股价
译注7:应该是按住(hold)而不是点击(click)。