GIS负维度不允许问题:单城市Hexbin Mapbox正常其他异常
解决ff.create_hexbin_mapbox报错"negative dimensions are not allowed in GIS"的方案
问题根源
这个报错通常由两个核心原因导致:
- 筛选后的城市数据框无有效数据(行数为0),无法生成六边形网格
- 目标城市的经纬度范围过小,搭配默认的六边形网格参数(
nbinsx/nbinsy)时,计算出的网格维度异常
分步解决方法
验证筛选后的数据是否存在
先打印目标城市数据框的行数,确认是否有数据:print(astana.shape) # 输出格式为(行数, 列数),如果行数为0说明无匹配数据- 如果行数为0:放宽该城市的经纬度筛选范围,比如调整阿斯塔纳的条件:
astana = df.loc[(df['latitude']>=43.0 )&(df['latitude'] <= 50.0 )&(df['longitude']>=71.0 )&(df['longitude']<=72.0 )] - 如果行数大于0:进入下一步调整可视化参数
- 如果行数为0:放宽该城市的经纬度筛选范围,比如调整阿斯塔纳的条件:
调整六边形网格参数
针对小范围城市区域,手动缩小nbinsx/nbinsy的值,并调整radius(网格半径,单位米)来适配区域大小:import plotly.figure_factory as ff fig = ff.create_hexbin_mapbox( data_frame=astana, lat='latitude', lon='longitude', nbinsx=15, # 降低网格数量,避免维度异常 nbinsy=15, radius=800, # 根据城市范围调整半径,确保网格合理分布 mapbox_style='carto-positron', color_continuous_scale='Viridis' ) fig.show()额外检查项
- 确认数据中
latitude和longitude列是数值类型,而非字符串,否则筛选逻辑会失效 - 检查是否存在异常经纬度值(比如超出合理范围的数值),可通过
df[['latitude', 'longitude']].describe()排查
- 确认数据中
内容的提问来源于stack exchange,提问作者Sultanbek Jakhanov
相关产品推荐
相关产品推荐

