Infinite horizontal line in Bokeh Infinite horizontal line in Bokeh python python

Infinite horizontal line in Bokeh


You are looking for "spans":

Spans (line-type annotations) have a single dimension (width or height) and extend to the edge of the plot area.

Please, take a look at http://docs.bokeh.org/en/latest/docs/user_guide/annotations.html#spans

So, the code will look like:

import numpy as npimport bokeh.plotting as bkfrom bokeh.models import Spanp = bk.figure()# Vertical linevline = Span(location=0, dimension='height', line_color='red', line_width=3)# Horizontal linehline = Span(location=0, dimension='width', line_color='green', line_width=3)p.renderers.extend([vline, hline])bk.show(p)

With this solution users are allowed to pan and zoom at will. The end of the lines will never show up.


The Bokeh documentation on segments and rays indicates the following solution (using ray):

To have an “infinite” ray, that always extends to the edge of the plot, specify 0 for the length.

And indeed, the following code produces an infinite, horizontal line:

import numpy as npimport bokeh.plotting as bkp = bk.figure()p.ray(x=[0], y=[0], length=0, angle=0, line_width=1)p.ray(x=[0], y=[0], length=0, angle=np.pi, line_width=1)bk.show(p)


If you plot two rays from the middle they won't get smaller as you zoom in or out since the length is in pixel. So something like this:

p.ray(x=[0],y=[0],length=300, angle=0, legend="y(x) = 0")p.ray(x=[0],y=[0],length=300, angle=np.pi, legend="y(x) = 0")

But if the user pans in either direction the end of the ray will show up. If you can prevent the user from panning at all (even when they zoom) then this is a little nicer code for a horizontal line.

If the user is able to zoom and pan anywhere they please, there is no good way (as far as I can tell) to get a horizontal line as you describe.