I want to prepare a bokeh plot that uses a ColumnDataSource
. The pandas
DataFrame
that is the source of the data has one column and a datetime
index:
How do I specify that the x value should be the index. I tried just omitting it, hoping that would be the default, but it did not work:
There is an ugly solution where I just copy the index as a column in the dataframe, but I hope there is a more elegant solution:
The issue is that you have to specify which column should be the "x" column. If you don't specify the "x" value, the default behavior in bokeh.plotting is to try to find a column called "x" in your ColumnDataSource (which doesn't exist).
One tricky thing here is that you're using a named index ('timeseries') in pandas. That name is carried over when you create a ColumnDataSource, so that your source probably looks like:
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]}
It would work if you use:
p.line(source=ds, x='timestamps', y='avg')
You can call the index with the usual syntax to get an index from DF
as:p.line(x = df.index.values, y = df['values_for_y'])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With