我一直在尝试从包含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')
但是在绘制烛台之后,我找不到改变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')
我找不到在同一图形上绘制这两个图形的方法,我在绘制烛台后仔细研究了如何调整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
我认为我的问题是我没有正确进行转换,有人会知道我做的哪一部分是错误的,为什么它不能产生正确的结果?