使用带索引的数据框在Bokeh中进行TimeSeries

时间:2016-01-24 10:23:41

标签: python pandas time-series bokeh

我正在尝试使用Bokeh绘制Pandas数据框,其中DateTime列包含年份和数字。如果DateTime被指定为x,则行为是预期的(x轴上的年份)。但是,如果我使用set_indexDateTime列转换为数据帧的索引,然后仅指定y中的TimeSeries,我会在x中获得以毫秒为单位的时间-轴。最小的例子

import pandas as pd
import numpy as np
from bokeh.charts import TimeSeries, output_file, show

output_file('fig.html')
test = pd.DataFrame({'datetime':pd.date_range('1/1/1880', periods=2000),'foo':np.arange(2000)})
fig = TimeSeries(test,x='datetime',y='foo')
show(fig)

output_file('fig2.html')
test = test.set_index('datetime')
fig2 = TimeSeries(test,y='foo')
show(fig2)

这是预期的行为还是错误?我希望这两种方法都有相同的图片。

干杯!!

1 个答案:

答案 0 :(得分:1)

Bokeh过去常常因内部原因添加索引,但截至不是最新版本(> = 0.12.x),它不再这样做了。另外值得注意的是,bokeh.charts API已被弃用和删除。使用稳定bokeh.plotting API的等效代码会产生预期结果:

import pandas as pd
import numpy as np
from bokeh.plotting import figure, output_file, show
from bokeh.layouts import row

output_file('fig.html')

test = pd.DataFrame({'datetime':pd.date_range('1/1/1880', periods=2000),'foo':np.arange(2000)})

fig = figure(x_axis_type="datetime")
fig.line(x='datetime',y='foo', source=test)

test = test.set_index('datetime')

fig2 = figure(x_axis_type="datetime")
fig2.line(x='datetime', y='foo', source=test)
show(row(fig, fig2))

enter image description here