2017-04-11 99 views

回答

2

有没有办法来定位直接利用屏幕空间坐标字形。事实证明,要支持Bokeh的核心功能即所有命中测试机器都太难了。我可以想象两种可能的解决方法。

首先是使用某种Annotation。注释可以将定位在屏幕坐标中(因为它们不参与命中测试)。目前没有“圈子”注释,但也许框或多边形注释可以满足您的需求。该BoxAnnotation在用户引导段和聚注释是相似的:

http://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#box-annotations

或者,您可以创建添加第二个“多余的范围”,也就是对屏幕(像素)单位的代理。这方面的一个例子是在这里:

http://bokeh.pydata.org/en/latest/docs/user_guide/plotting.html#twin-axes

这里是一个完整的例子:

from bokeh.models import Range1d 
from bokeh.plotting import figure, show, output_file 

output_file("foo.html") 

p = figure() 

# this will only work for fixed layout plots, and you'll have to tune 
# the 'end' property to match your plot dimensions 
p.extra_y_ranges = {"foo": Range1d(start=0, end=520)} 

p.circle([10, 20, 30], [20, 260, 500], size=10, y_range_name="foo") 

show(p) 

还有现在当地块内部尺寸改变回调。在可调整大小的情节中,你可以扩展它以更强大/更复杂。为这些内部绘图维度添加回调的方式如下所示:

p.on_change("inner_width", some_callback) 
p.on_change("inner_height", some_callback) 

for python(server)callbacks。使用js_on_change代替CustomJS回调。

+0

感谢您的回答;在这一刻我正在使用一些东西:(可以说我正在绘制10点x和y作为坐标):'top_range = max(points ['y'])''bottom_range = min(points [' y'])''range = top_range-bottom_range'如果我想在图表的中间放一个点,我会把它放在'bottom_range + range * 0.5'处。然而,因为顶部和底部点之上和之下都有一些填充,所以这有点不起眼。没有办法直接从数字属性中检索'y_range'吗? –

+0

此外,它不是(从用户指南例如至少不)明确了如何将批注的位置,例如在像素箱标注坐标 –

+0

一旦你有一个首发位置,参考指南是好这样的问题:HTTP: //bokeh.pydata.org/en/latest/docs/reference/models/annotations.html#bokeh.models.annotations.BoxAnnotation.left_units – bigreddot