安装GeoPandas应优先用conda-forge而非pip以避免DLL或模块导入错误;读取数据后须检查并统一CRS(如转EPSG:3857);绘图时正确区分column(数值上色)与color(统一颜色),加底图需传入ax且确保CRS匹配。

安装失败时优先用 conda-forge 而不是 pip
直接 pip install geopandas 在 Windows 或 macOS 上大概率报错,常见错误是 ImportError: DLL load failed 或 ModuleNotFoundError: No module named 'fiona'。这不是你操作错了,而是 GDAL/Fiona 这类底层 C 库在 pip 编译时极易失败。
- 用 conda 创建独立环境:
conda create -n geo python=3.9,再conda activate geo - 然后只走 conda-forge 渠道:
conda install -c conda-forge geopandas contextily matplotlib - 验证是否装全:
import geopandas as gpd; gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))不报错才算真正可用
读取数据前必须确认 CRS(坐标参考系)
很多初学者画出的地图“歪了”或“挤成一团”,根源不在代码,而在没处理好坐标系。GeoPandas 读取文件后默认保留原始 CRS,但 matplotlib 绘图不校验它,直接按数值画点——如果 CRS 是 UTM(单位米)却当成 WGS84(单位度)画,图形就会严重失真。
- 检查 CRS:
gdf.crs,输出类似EPSG:32650或None - 若为
None,必须手动设:gdf.set_crs('EPSG:4326', inplace=True) - 若需叠加底图(如 contextily),目标 CRS 必须是 Web Mercator:
gdf = gdf.to_crs('EPSG:3857') - 注意:
to_crs()返回新对象,不加inplace=True原 gdf 不变
plot() 的 color/column/legend 参数容易混淆
GeoDataFrame.plot() 看似简单,但传错参数会导致地图全黑、颜色乱码或图例不显示。关键不是“能不能画”,而是“画得对不对”。
- 想按某列数值上色(如人口密度):必须传
column='pop_est',不能只传color='red' - 想统一颜色(如所有国家标红):用
color='red',此时column和legend都应省略 - 要显示图例:仅当用了
column且legend=True才生效;若用了color,legend无效 - 中文标签乱码?加一行:
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
加底图必须先转 EPSG:3857,且 contextily.add_basemap() 要传 ax
很多人调用 ctx.add_basemap(ax) 后地图空白或报错 AttributeError: 'AxesSubplot' object has no attribute 'projection',问题出在 CRS 和绘图对象绑定关系上。
立即学习“Python免费学习笔记(深入)”;
- 底图(如 OpenStreetMap)只支持 Web Mercator(
EPSG:3857),所以你的gdf必须先转:gdf_3857 = gdf.to_crs('EPSG:3857') - 绘图时指定
ax:ax = gdf_3857.plot(figsize=(10,6), color='lightgray') - 再加底图:
ctx.add_basemap(ax, source=ctx.providers.OpenStreetMap.Mapnik) - 最后调
plt.show()——漏掉这步,在某些 IDE(如 VS Code)里图不显示
column 和 color 分开用、把 ax 传到位,90% 的可视化问题就解决了。


















