繁体   English   中英

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

[英]Plot a pandas dataframe using the dataframe index for x coordinate in bokeh

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述 在此输入图像描述

问题是您必须指定哪个列应该是“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.reset_index(inplace = True)

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

df["avg"].plot()

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM