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
相关产品推荐
相关产品推荐

