如何控制Bokeh中字形的z顺序?

时间:2016-07-29 23:07:08

标签: javascript bokeh

我一直在查看示例,文档和谷歌,我无法找到如何做到这一点的示例或解释......

我正在直接使用JavaScript库,当我在绘图中添加一个字形时,我只想指定一个应该显示该字形的顺序。我有意图重叠的字形,我需要指定其中一个在顶部。我相信我可以使用figure.renderers获取所有渲染器的列表,并手动对其进行排序,但这看起来非常简陋和粗糙......

我尝试使用level参数,例如

figure.text(x, y, 'text', {
  text_align: "center",
  text_baseline: "middle",
  text_font_size: {
    value: '8pt'
  },
  level: 'overlay'
});

但我总是收到错误

bokeh-0.12.0.min.js:3 Uncaught Error: Text.set('level'): level wasn't declared

我也尝试将level设置为数值,但没有运气。我想控制字形呈现的顺序,而不必按顺序添加它们,类似于在MatplotLib中执行它的方式。

这可以用Bokeh吗?

2 个答案:

答案 0 :(得分:1)

通过更改补丁的.level属性,可以实现一定程度的控制。

例如,以下代码在蓝点上方产生一个红色补丁:

from bokeh.io import output_notebook, show
from bokeh.plotting import figure
output_notebook()
p = figure(title='one')
p.scatter([1, 2, 3, 4], [1, 2, 1, 3], size=20)
patch = p.varea(x=[1, 2, 3, 4], y1=[0, 1, 0, 2.5], y2=[1.5, 1.75, 1.5, 3.5], color='red', alpha=0.75)
show(p)

Red patch above the dots

如果要控制面片z顺序,则需要将其level属性修改为以下之一:图像,参考底图,字形,注释或叠加。在我们的情况下,我们需要“参考底图”

p = figure(title='one')
p.scatter([1, 2, 3, 4], [1, 2, 1, 3], size=20)
patch = p.varea(x=[1, 2, 3, 4], y1=[0, 1, 0, 2.5], y2=[1.5, 1.75, 1.5, 3.5], color='red', alpha=0.75)
patch.level = 'underlay'
show(p)

red patch below the dots

答案 1 :(得分:0)

Bokeh按照将它们添加到绘图中的顺序绘制字形。例如。代码如:

p.vbar(...)
p.line(...)
p.circle(...)

Bokeh将绘制vbars,然后是线条,然后是圆圈。