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

Python 使用bokeh中x坐标的数据框索引绘制数据框,python,pandas,plot,dataframe,bokeh,Python,Pandas,Plot,Dataframe,Bokeh,我想准备一个使用ColumnDataSource的bokeh图。作为数据源的数据框有一列和一个日期时间索引: 如何指定x值应为索引。我试着省略它,希望这是默认值,但它不起作用: 有一个丑陋的解决方案,我只是将索引作为列复制到dataframe中,但我希望有一个更优雅的解决方案: 我通常会重置索引,这会使索引成为一列。类似于你丑陋的解决方案。然后绘制指定的列 df.reset_index(inplace = True) 或者,您可以只引用列,而在matplotlib中,默认情况下,它通常以

我想准备一个使用
ColumnDataSource
的bokeh图。作为数据源的数据框有一列和一个日期时间索引:

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

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


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

df.reset_index(inplace = True)
或者,您可以只引用列,而在matplotlib中,默认情况下,它通常以您想要的方式使用索引。不确定它是否对你有用,但值得一试

df["avg"].plot()
或者,您可以尝试时间序列图方法?详情如下


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

这里有一件棘手的事情,就是在pandas中使用命名索引(“timeseries”)。当您创建ColumnDataSource时,该名称会保留下来,因此您的源可能看起来像:

ds = ColumnDataSource(df)
print(ds.data)
# the ts_n values would be the actual timestamps from the df
> {'timestamp': [ts_1, ts_2, ts_3, ts_4, ts_5], 'avg': [0.9, 0.8, 0.7, 0.8, 0.9]}
如果您使用:

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

您可以使用常用语法调用索引,以从DF获取索引 as:

p.line(x=df.index.values,y=df['values\u for_y'])

我知道了,我不知道索引(相对于普通列)可以命名。谢谢。但是你没有使用一个显式的公共数据框(源关键字参数),这会使你想要在简单的子图上构建的更有趣的交互式多轴图形复杂化。