使用Python Bokeh绘制马德里选举交互地图无显示无报错求助
Bokeh选举地图无显示排查思路
坐标适配问题
- 这是最常见的触发原因:Bokeh初始化
figure时默认画布坐标范围是0~400区间,而马德里地理数据一般用WGS84经纬度坐标,数值集中在北纬40°、西经3.7°附近,完全落在默认可视区域外,看起来就像没有渲染内容。 - 排查方法:打印你的GeoJSON中坐标的最大最小值,在初始化
figure时手动指定x_range、y_range参数为坐标的数值区间即可。
颜色映射配置问题
- 你代码中
LinearColorMapper设置的数值范围是low=0, high=1,如果P.P.字段存储的是绝对得票数而非得票占比,所有数值都会超过上限1,所有区域会被渲染为同一种最深色,看起来像没有输出。 - 排查方法:打印
P.P.字段的最大最小值,把low和high参数修改为和字段数值范围匹配的值。
字段匹配问题
- 检查GeoJSON的
properties字段中是否存在你用到的P.P.、P.S.O.E.、Votos Totales、Municipio字段,注意大小写、特殊字符、空格是否完全匹配,字段不匹配会导致渲染时没有对应值,也可能出现空画布。
渲染环境问题
- 如果在Jupyter环境运行,先确认Bokeh的notebook扩展已正确安装,
output_notebook()执行正常。可以临时把output_notebook()替换为output_file("madrid_elections.html"),运行后打开本地生成的HTML文件验证是否能显示,排除Jupyter本身的渲染异常。
数据转换问题
- 虽然你确认了GeoJSON结构一致,还是建议打印
wi_geojson.geojson的前1000个字符,确认geometry字段是标准的Polygon/MultiPolygon结构,没有出现坐标字段为空、几何类型错误的问题。
简化实现方案
如果需要快速验证数据效果,可以用GeoPandas自带的explore()方法生成基于Leaflet的交互地图,不需要手动处理坐标映射、参数配置,代码更简洁不易出错。如果坚持用Bokeh,也可以搭配hvplot库,GeoDataFrame直接调用.hvplot(geo=True)即可自动适配坐标、加载底图,降低手写代码的出错概率。
内容的提问来源于stack exchange,提问作者Ber Tsacianegu del Tepuy
相关产品推荐
相关产品推荐

