☰Read-only archive⌕
Looking for help with Bokeh?

This is a read-only archive. Ask questions and join the conversation on GitHub.

Visit Community Support on GitHub →
Archived discussions · Captured October 28, 2026

Range1D throwing error with dates between 1.4.0 and 2.2.2 (and 2.3.0dev3)

Community Support
rstrutt
rstrutt

I’m migrating from 1.4.0 to 2.3.0 and came across this issue which also occurs in 2.2.2

Currently I’m not sure whether I was originally doing things incorrectly, or whether this is a regression break.

I’ve boiled it down to a minimal test case. Essentially, I want to fix the x_range between 2 specific dates, then plot some stuff.

In 1.4.0 I get this;

But in 2.2.2 and 2.3.0dev3 I get the javascript error;

Self-contained minmal example;

from bokeh.models import DatetimeTickFormatter, Range1d
from bokeh.plotting import curdoc, figure
from datetime import date

# Get a reference to the document we will be creating
doc = curdoc()

# create a new plot with a title and axis labels.  Set range to be 1st Jan 2020 to 31st Dec 2020
plot = figure(
    title="simple line example", x_axis_label='x', y_axis_label='y',
    x_range=Range1d(start=date(2020, 1, 1), end=date(2020, 12, 31))
)

# plot a line through three dates
x = [date(2020, 3, 1), date(2020, 4, 1), date(2020, 5, 1)]
y = [1, 2, 3]
plot.line(x, y, legend_label="Temp.", line_width=2)

# Format the x-axis nicely
plot.xaxis.formatter = DatetimeTickFormatter(days=['%Y-%m-%d'], months=['%Y-%m-%d'], years=['%Y-%m-%d'])

# Put the plot into the document
doc.add_root(plot)
⌁   Link to post
Bryan
Bryan

Things were changed intentionally at 2.0 (intentionally) so that date values are now always consistently serialized as ISO date strings. This was for a few reasons, but especially so that the datepicker widget, which had long suffered timezone issues that it never should have due to implicit conversions of date to datetime, could finally be made to work reliably and correctly.

This was mentioned explicitly in the 2.0 migration guide:

Releases — Bokeh 2.4.2 Documentation

TLDR; Continuous range values now must be datetime objects (or timestamps) not simple dates.

⌁   Link to post
rstrutt
rstrutt

That did it!

Ranges in datetime.datetime and data specified as np.datetime64 & things are working smoothly again.

Thanks again for the quick reply.

We’re almost done with our migration from 1.4.0 to 2.2.3dev3 and things are looking good!

⌁   Link to post

End of archived discussion · Replies are disabled