x_axis_type libreria fill_color python plot line bokeh

python - libreria - fill_color bokeh



Linea horizontal infinita en bokeh (4)

¿Hay una manera de trazar una línea horizontal infinita con Bokeh? Los puntos finales de la línea nunca deben hacerse visibles, sin importar qué tan lejos esté el zoom del usuario.

Esto es lo que he intentado hasta ahora. Simplemente imprime un lienzo vacío:

import bokeh.plotting as bk import numpy as np p = bk.figure() p.line([-np.inf,np.inf], [0,0], legend="y(x) = 0") bk.show(p)

Una forma sería establecer los puntos finales extremadamente altos / bajos y los valores x_range y y_range de la figura muy pequeños en relación con ellos.

import bokeh.plotting as bk import numpy as np p = bk.figure(x_range=[-10,10]) p.line([-np.iinfo(np.int64).max, np.iinfo(np.int64).max], [0,0], legend="y(x) = 0") bk.show(p)

Sin embargo, espero que alguien tenga una solución más elegante.

Edición: se eliminó la solución obsoleta


En caso de que se esté preguntando cómo usar spans en combinación con series de tiempo, convierta sus fechas en marcas de tiempo de Unix:

start_date = time.mktime(datetime.date(2018, 3, 19).timetuple())*1000 vline = Span(location=start_date,dimension=''height'', line_color=''red'',line_width=3)

O vea este enlace para un ejemplo completo.


La documentación de Bokeh sobre segmentos y rayos indica la siguiente solución (utilizando ray ):

Para tener un rayo "infinito", que siempre se extiende hasta el borde de la gráfica, especifique 0 para la longitud.

Y de hecho, el siguiente código produce una línea horizontal infinita:

import numpy as np import bokeh.plotting as bk p = 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)


Si traza dos rayos desde el centro, no se reducirán a medida que se acerca o se aleja, ya que la longitud es en píxeles. Así que algo como esto:

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")

Pero si el usuario se desplaza en cualquier dirección, aparecerá el final del rayo. Si puede evitar que el usuario se desplace del todo (incluso cuando hacen zoom), este es un código un poco mejor para una línea horizontal.

Si el usuario puede hacer zoom y desplazarse en cualquier lugar que desee, no hay una buena manera (por lo que puedo decir) de obtener una línea horizontal como usted describe.


Usted está buscando "spans":

Los tramos (anotaciones de tipo de línea) tienen una sola dimensión (ancho o alto) y se extienden hasta el borde del área de trazado.

Por favor, eche un vistazo a http://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#spans

Entonces, el código se verá como:

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

Con esta solución, los usuarios pueden desplazarse y hacer zoom a voluntad. El final de las líneas nunca aparecerá.