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

mplleaflet.show报错排查及Python地图绘图包推荐

Python地图网格绘制报错排查与替代方案

错误原因

你遇到的TypeError: type object argument after ** must be a mapping, not CRS是版本兼容性问题导致的:

  • 旧版mplleaflet的show()方法要求crs参数为字典格式(如{'init': 'epsg:4326'});
  • 但新版GeoPandas中,grid.crs返回的是CRS对象而非字典,当mplleaflet尝试用**crs解包时,就触发了类型错误。

修复方案

修改mplleaflet.show()的调用代码,三选一即可:

  1. 省略crs参数(你的网格已转换为WGS84,mplleaflet默认使用该坐标系):
mplleaflet.show(fig=ax.figure, path='grid_map.html')
  1. 显式传入EPSG字符串:
mplleaflet.show(fig=ax.figure, crs='EPSG:4326', path='grid_map.html')
  1. 将CRS对象转换为字典格式传入:
mplleaflet.show(fig=ax.figure, crs=grid.crs.to_dict(), path='grid_map.html')

推荐替代绘图包

如果mplleaflet的兼容性问题频繁出现,推荐以下更主流的地图绘图工具:

Folium

基于Leaflet.js,专注交互式地图,语法简洁,完美支持GeoDataFrame:

import folium
# 初始化地图,设置中心坐标和缩放级别
m = folium.Map(location=[(MINY_MUC + MAXY_MUC)/2, (MINX_MUC + MAXX_MUC)/2], zoom_start=12)
# 添加网格图层(仅显示边框)
folium.GeoJson(grid, style_function=lambda x: {'color': 'black', 'fillOpacity': 0}).add_to(m)
# 保存为HTML文件
m.save('grid_map_folium.html')

Plotly Express

适合制作高交互性可视化图表,自带多种地图样式,支持动态缩放、hover提示:

import plotly.express as px
fig = px.choropleth_mapbox(
    grid,
    geojson=grid.geometry,
    locations=grid.index,
    mapbox_style="carto-positron",
    center={"lat": (MINY_MUC + MAXY_MUC)/2, "lon": (MINX_MUC + MAXX_MUC)/2},
    zoom=12,
    color_discrete_sequence=['transparent']
)
# 设置网格边框样式
fig.update_traces(marker_line_color='black', marker_line_width=0.5)
# 隐藏地图边框,优化显示
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

GeoPandas + Matplotlib

如果仅需静态地图,直接用GeoPandas内置绘图功能即可,无需额外依赖:

import matplotlib.pyplot as plt
# 绘制网格,仅显示黑色边框
ax = grid.plot(edgecolor='black', facecolor='none', figsize=(10, 10))
# 隐藏坐标轴
ax.set_axis_off()
# 保存为高清图片
plt.savefig('grid_static.png', dpi=300, bbox_inches='tight')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:55:29