Reputation: 31151
I'm using bokeh with an ipython notebook.
I want to plot a line graph in bokeh using a pandas DataFrame containing datetimes:
import pandas as pd
from datetime import datetime as dt
from bokeh.io import output_notebook
from bokeh.charts import Bar, Line, show
df = pd.DataFrame(data=[1,2,3],
index=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)],
columns=['foo'])
output_notebook()
show(Line(df))
However, bokeh uses microseconds! Why is this? How do I fix it?
Upvotes: 56
Views: 54443
Reputation: 14209
As of bokeh 0.12.3, you can now do:
p = figure(..., x_axis_type='datetime', ...)
Upvotes: 140
Reputation: 3272
FWIW, the default behavior has changed since the question was first posted. The original code now yields:
Upvotes: 6
Reputation: 2626
is that ok ?
import pandas as pd
from math import pi
from datetime import datetime as dt
from bokeh.io import output_file
from bokeh.charts import show
from bokeh.models import DatetimeTickFormatter
from bokeh.plotting import figure
df = pd.DataFrame(data=[1,2,3],
index=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)],
columns=['foo'])
p = figure(plot_width=400, plot_height=400)
p.line(df.index, df['foo'])
p.xaxis.formatter=DatetimeTickFormatter(
hours=["%d %B %Y"],
days=["%d %B %Y"],
months=["%d %B %Y"],
years=["%d %B %Y"],
)
p.xaxis.major_label_orientation = pi/4
output_file('myplot.html')
show(p)
Upvotes: 45