如何在Bokeh中控制glyphs的Z顺序?

8
我一直在查阅示例、文档和谷歌,但是我找不到一个简单的示例或解释来说明如何做到这一点...
我直接使用 JavaScript 库,当我向绘图中添加 glyth 时,我只想指定该 glyth 应该显示的顺序。我有一些有意重叠的 glyth,并且我需要指定其中之一在上层。我相信我可以通过使用 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个回答

7

通过更改补丁的.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

如果我们想要控制补丁的层次顺序,我们需要修改其“级别”属性为以下之一:图像、下层、字形、注释或覆盖层。在我们的情况下,我们需要“下层”。
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
level='underlay' 也可以在 p.varea 中称为 kwarg。 - CreekGeek

3

Bokeh按照添加到图表中的顺序绘制图形元素。例如,使用以下代码:

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

Bokeh将绘制vbar、线条和圆圈。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接