我有一个数据帧df包含一个不规则的时间序列,一天有超过1000条记录,看起来或多或少是这样的:
2014-05-10 00:07:04 10
2014-05-10 00:07:48 -20
2014-05-10 00:07:51 -30
2014-05-10 00:09:28 70
2014-05-10 00:09:59 80
2014-05-10 00:10:05 0
2014-05-10 00:10:11 80
2014-05-10 00:10:22 40
2014-05-10 00:11:12 10
2014-05-10 00:12:44 80
2014-05-10 00:12:59 80
2014-05-10 00:13:15 80
2014-05-10 00:16:20 40
我正在重新采样数据帧,如下所示:
ticks = df.ix[:, ['price']]
tick_bars = ticks.price.resample('15min', how='ohlc')
产生类似这样的东西:
open high low close
Timestamp
2014-05-10 00:00:00 10 80 -30 80
2014-05-10 00:15:00 40 80 -30 10
2014-05-10 00:30:00 10 80 -30 70
2014-05-10 00:45:00 0 80 -30 70
2014-05-10 01:00:00 70 70 20 40
2014-05-10 01:15:00 70 80 -20 0
这样做之后:
from matplotlib.finance import candlestick
我尝试通过这样做来绘制OHLC图表:
candlestick(tick_bars)
获得这个:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-66-26a465709cae> in <module>()
----> 1 candlestick(tick_bars)
TypeError: candlestick() takes at least 2 arguments (1 given)
tick_bars已经包含OLHC数据,加上x轴的时间戳。我不熟悉matplotlib,所以我不知道缺少什么参数。
我的问题是:
1)缺少的论点是什么? 2)如何将绘图限制在特定的时间范围内(例如上午11点到下午2点),而不是绘制整个系列? 3)是否有替代matplotlib来绘制OHLC图表?
谢谢
答案 0 :(得分:1)
经过大量研究并询问了一些朋友,这对我有用:
tick_bars['t'] = tick_bars.index.map(dates.date2num)
fig, ax = plt.subplots()
candlestick(ax, tick_bars[['t', 'open', 'close', 'high', 'low']].values, width=1.0 / 3600 * 24)
ax.xaxis_date()
获取此图表(需要一些样式)
由于未知原因,索引(时间)需要转换为十进制数。该图表可能看起来“奇怪”,因为我使用了从均匀分布生成的随机数据,带有一些明显的大写和地板。此外,缩放需要手动完成......
需要找到一个更好的库来绘制OHLC图表。
答案 1 :(得分:0)
重新采样的结果将时间作为数据帧的索引。发生这种情况时,在df上调用mpl函数不会传递索引。因此,如果键入tick_bars.values,则可以看到。你不会看到时间。
尝试
tick_bars.reset_index(inplace = True)
candlestick(ax,tick_bars.values)
这明确地传递了时间。