1

运行以下代码时,它显示错误的图。

from pandas_datareader import data
from datetime import datetime as dt
from bokeh.plotting import figure, show, output_file

st=dt(2016,3,1)
end=dt(2016,3,10)
df=data.DataReader(name="GOOG",data_source="yahoo",start=st,end=end)
p=figure(x_axis_type="datetime",height=300,width=1000)
p.title.text="CandleStick graph"
p.rect(df.index[df.Close > df.Open],(df.Close+df.Open)/2,12*60*60*1000,abs(df.Close-df.Open))
show(p)
4

1 回答 1

2

所有数据列的长度必须相同,但您传递的数据列比其他列短:

df.index[df.Close > df.Open]

实际上运行你的代码,Bokeh 甚至会告诉你这个:

BokehUserWarning: ColumnDataSource's columns must be of the same length. 
Current lengths: ('height', 9), ('x', 5), ('y', 9)

您只传递了 5 个坐标x和 9 个坐标。论点都需要匹配。您可以:

  • df.index根本不做子集

  • 以相同的方式对所有其他参数进行子集

(供将来参考:您应该始终在您的 SO 问题中包含任何错误或警告消息,例如上面的那个 - 并且,正如@sjc 所提到的,实际详细描述问题,而不仅仅是声明“错误”)

于 2020-01-06T18:56:19.717 回答