You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh地理数据可视化代码报错:期望TileSource实例却传入字符串

解决Bokeh添加瓦片地图报错问题

问题原因

你使用的Bokeh 2.4.3版本不支持直接将瓦片名称字符串(如"CartoDB Positron")传入add_tile()方法。该简化用法是在Bokeh 3.0及以上版本才引入的特性,旧版本要求必须传入TileSource类的实例,因此出现expected an instance of type TileSource的报错。

解决方案

有两种可行的解决方式:

方案一:升级Bokeh版本

如果项目允许,将Bokeh升级到3.0或更高版本,原代码即可正常运行。执行升级命令:

pip install --upgrade bokeh>=3.0

方案二:在当前版本中显式使用TileSource实例

保持Bokeh 2.4.3不变,通过bokeh.tile_providers模块导入并使用对应的瓦片源实例:

from bokeh.plotting import figure, show
from bokeh.tile_providers import get_provider, Vendors

# range bounds supplied in web mercator coordinates
p = figure(x_range=(-2000000, 2000000), y_range=(1000000, 7000000),
           x_axis_type="mercator", y_axis_type="mercator")

# 获取支持Retina分辨率的CartoDB Positron瓦片源
tile_source = get_provider(Vendors.CARTODB_POSITRON_RETINA)
p.add_tile(tile_source)

show(p)

若不需要Retina分辨率,可替换为Vendors.CARTODB_POSITRON。

补充说明

报错中提到的xyzservices是Bokeh 3.0+用于管理瓦片服务依赖的库,旧版本Bokeh并未集成该库的自动调用逻辑,因此无法通过字符串名称直接获取瓦片源。

内容的提问来源于stack exchange,提问作者milikest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:23:13