Python Bokeh - 可以使用数据坐标和像素坐标的混合绘图

时间:2017-04-11 19:25:11

标签: python bokeh

有没有办法用作输入,例如,圆圈是基于x坐标输入数据的坐标字形,输入为y坐标图表顶部或底部的像素?

有点像matplolib的混合变换?

或者,在像素坐标中转换数据坐标会很容易,但是我可以找到y_range值?我试过了figure.y_range.start,但它没有返回任何内容

1 个答案:

答案 0 :(得分:3)

无法使用屏幕空间坐标直接定位字形。事实证明,太难以支持这一点以及所有作为Bokeh核心功能的热门测试机器。我能想象出两种可能的解决方法。

第一种是使用某种Annotation。注释可以定位在屏幕坐标中(因为它们不参与命中测试)。目前还没有"圈"注释,但也许盒子或多边形注释将满足您的需求。 BoxAnnotation在用户指南中有一个部分,poly注释类似:

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)

用于python(服务器)回调。使用js_on_change进行CustomJS回调。