Tob*_*otz 19 python plot line bokeh
有没有办法用Bokeh绘制无限水平线?无论用户缩放多远,线的端点都不应该变得可见.
这是我到目前为止所尝试的.它只打印一个空画布:
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)
Run Code Online (Sandbox Code Playgroud)
一种方法是将端点设置为极高/低,并且数字的x_range和y_range相对于它们非常小.
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)
Run Code Online (Sandbox Code Playgroud)
但是,我希望有人有一个更优雅的解决方案.
编辑:删除过时的解决方案
小智 32
您正在寻找"跨度":
跨度(线型注释)具有单个维度(宽度或高度)并延伸到绘图区域的边缘.
请查看 http://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#spans
所以,代码看起来像:
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)
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,用户可以随意平移和缩放.线的末端永远不会出现.
关于段和光线的Bokeh文档指出以下解决方案(使用ray):
要获得"无限"光线,它始终延伸到绘图的边缘,请为长度指定0.
实际上,以下代码生成一条无限的水平线:
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)
Run Code Online (Sandbox Code Playgroud)
如果从中间绘制两条光线,则它们不会随着放大或缩小而变小,因为长度以像素为单位。所以像这样:
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")
Run Code Online (Sandbox Code Playgroud)
但如果用户向任一方向平移,光线的末端就会显示出来。如果您可以完全阻止用户平移(即使他们缩放),那么对于水平线来说,这是一个更好的代码。
如果用户能够在任何地方缩放和平移,那么就没有好的方法(据我所知)来获得您所描述的水平线。