首页 > 解决方案 > 在带有 Bokeh serve 的图中使用标签和 openstreetmap

问题描述

我用散景创建了一个图表,并用散景.tile_provider 和CARTODBPOSITRON 添加了openstreetmap。我还向点数据添加了标签,但注意到标签在 openstreetmap 下方消失了。有没有办法在图表中将标签放在“上方”或“上方”?

我试图在没有 openstreetmap 的情况下运行我的代码并且标签是可见的。但是,添加 openstreetmap 后,标签会在地图下方消失。在 f.add_tile(tile_provider) 下方移动 f.add_layout(labels) 似乎不起作用。

from bokeh.tile_providers import get_provider, Vendors
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource, LabelSet, Label
from bokeh.plotting import figure
from bokeh.layouts import column, row, layout

source_o = ColumnDataSource(data=dict(label_o = ["DC-001", "DC-002", "DC-003"],                        
xdata_o = [461701.3717889148, 461752.3817861293, 461752.9975699731],
ydata_o = [6788398.566150362, 6788377.060072248, 6788376.785602528]))

tile_provider = get_provider(Vendors.CARTODBPOSITRON)
f = figure(x_range=(461820, 461880), y_range=(6788100, 6788600),
           x_axis_type="mercator", y_axis_type="mercator",
           plot_width=1400, 
           plot_height=400,
       tools="pan,wheel_zoom,reset")
label_f = LabelSet(x='xdata_o', y='ydata_o', text='label_o', source=source_o, level='glyph', x_offset=5, y_offset=5, render_mode='canvas')

f.add_tile(tile_provider)
f.circle(x='xdata_o', y='ydata_o', source=source_o, legend="Locaties DefoCube")
f.add_layout(label_f)

l = layout([f])

curdoc().add_root(l)

我有办法将标签“放在图表的顶部”吗?

标签: pythonbokeh

解决方案


编辑:实际上我只是注意到您正在更改渲染级别。几乎没有理由这样做。当我删除level="glyph"并让标签使用标准注释级别(高于所有字形)时,标签会显示在顶部(即使使用render_mode="canvas"


这似乎是一个错误。请提交包含所有这些信息的GitHub 问题。同时,设置render_mode='css'似乎LabelSet将标签浮动在顶部。

或者,text字形也可以使用,但没有标签所做的偏移参数:

f.text(x='xdata_o', y='ydata_o', text='label_o', source=source_o)

推荐阅读