使用bokeh中x坐标的数据框索引绘制pandas数据帧

时间:2016-06-19 05:30:52

标签: python pandas plot dataframe bokeh

我想准备一张使用ColumnDataSource的散景图。作为数据来源的pandas DataFrame有一列和一个datetime索引:

enter image description here

如何指定x值应该是索引。我试着省略它,希望这是默认值,但它不起作用:

enter image description here

有一个丑陋的解决方案,我只是将索引复制为数据框中的一列,但我希望有一个更优雅的解决方案:

enter image description here enter image description here

3 个答案:

答案 0 :(得分:10)

问题是您必须指定哪个列应该是“x”列。如果未指定“x”值,则bokeh.plotting中的默认行为是尝试在ColumnDataSource中找到名为“x”的列(该列不存在)。

这里有一个棘手的问题是你在pandas中使用了一个命名索引('timeseries')。创建ColumnDataSource时会继承该名称,以便您的源可能如下所示:

p.line(source=ds, x='timestamps', y='avg')

如果使用:

,它会起作用
func_1()

答案 1 :(得分:5)

我通常会重置索引,这会使索引成为一列。与丑陋的解决方案类似。然后绘制指定的列。

df.reset_index(inplace = True)

或者你可以只引用列,在matplotlib中,它通常以你想要的方式默认使用索引。不确定它是否适合您,但值得一试。

df["avg"].plot()

或者您可以尝试时间序列图方法吗?详情如下。

TimeSeries in Bokeh using a dataframe with index

答案 2 :(得分:2)

您可以使用通常的语法调用索引以从DF获取索引 如:
p.line(x = df.index.values, y = df['values_for_y'])