使用matplotlib绘制烛台,作为来自熊猫DataFrame的数据

时间:2018-07-29 00:39:17

标签: python python-3.x pandas matplotlib plot

我一直在尝试从包含ohlc数据(以m5为时间框架)以及来自另一个熊猫数组(以s1为时间框架)的数据的pandas DataFrame中绘制烛台,但是我没有设法使其工作。 / p>

我的数据如下:

In [83]: df[:3]
Out[83]: 
                        open     high      low    close
DateTime                                               
2015-01-04 22:00:00  1.19548  1.19551  1.18627  1.19257
2015-01-04 22:05:00  1.19257  1.19455  1.18976  1.19116
2015-01-04 22:10:00  1.19115  1.19404  1.19068  1.19353

In [84]: sec[:5]
Out[84]: 
                        open     high      low    close
DateTime                                               
2015-01-04 22:00:00  1.19548  1.19551  1.19525  1.19551
2015-01-04 22:00:01  1.19535  1.19535  1.19479  1.19482
2015-01-04 22:00:02  1.19483  1.19496  1.19474  1.19485
2015-01-04 22:00:03  1.19487  1.19490  1.19487  1.19490
2015-01-04 22:00:04  1.19453  1.19453  1.19388  1.19397

我的DataFrames的两个索引都是Datatime索引,并且都保存着ohlc数据。

当我尝试从同一图上的两个DataFrame绘制数据时,它工作得很好:

fig,ax1 = plt.subplots()

ax1.plot(sec['open'],linewidth=2)
ax1.plot(df['close'],'ko')

enter image description here

但是在绘制烛台之后,我找不到改变x轴的方法,因此无法在同一张图上绘制上述数据:

fig,ax1 = plt.subplots()

candlestick2_ohlc(ax1,opens=df["open"].values,highs=df["high"].values,lows=df["low"].values,closes=df["close"].values,width=.4,colorup='g')

enter image description here

我找不到在同一图形上绘制这两个图形的方法,我在绘制烛台后仔细研究了如何调整x轴,但是我认为我对matplotlib轴的工作方式了解不多,以及为什么我可以在同一张图上绘制来自具有不同TimeSeries的pandas数组的数据。

有人会知道如何使其工作吗?

编辑:

我没有注意到我使用了错误的函数(candlestick_ohlc而不是Candlestick2_ohlc),这解释了为什么我没有设法使我所见问题的文档起作用。

我尝试做与在这里找到的相同的操作:Overlapping Dates in Candlestick Plot from a Pandas DataFrame

fig,ax1 = plt.subplots()

ax1.xaxis_date()

ohlc = [df.index.map(mdates.date2num),df["open"].values,df['high'].values,df['low'].values,df['close'].values]

candlestick_ohlc(ax1,ohlc,width=.4,colorup='g')

无法运行并产生错误ValueError: ordinal must be >= 1

我也尝试过类似的操作:candlestick plot from pandas dataframe, replace index by dates

fig,ax1 = plt.subplots()

ax1.xaxis_date()
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))

ohlc = [mdates.date2num(df.index.astype(datetime.date)),df["open"].values,df['high'].values,df['low'].values,df['close'].values]

candlestick_ohlc(ax1,ohlc,width=.4,colorup='g')

这会产生另一条错误消息:

TypeError: dtype <class 'datetime.date'> not understood

我显然做错了,但我真的不知道该怎么办。

我查看了有关matplotlib.finance的Candlestick_ohlc函数的文档,他们说:

  

时间必须为浮动日期格式-请参见date2num

我认为我的问题是我没有正确进行转换,有人会知道我做的哪一部分是错误的,为什么它不能产生正确的结果?

0 个答案:

没有答案