如何使用GeoPandas处理含经纬度的CSV文件并绘制地图?Shapefile怎么用?
用GeoPandas结合CSV和Shapefile绘制地图
先搞懂Shapefile到底是什么
Shapefile是一种常用的地理空间数据格式,用来存储多边形、线、点这类地理要素的边界和属性。你需要它的核心原因是:你的CSV只有孤立的经纬度点,Shapefile能给你提供地图的底图(比如国家、城市的轮廓),让你的点数据有地理参考。
一步步操作
1. 安装依赖库
确保你装了必要的包:
pip install geopandas matplotlib
2. 读取CSV并转为GeoDataFrame
你的CSV里的经度、纬度是普通数值列,需要把它们转换成GeoPandas能识别的几何对象(Point):
import geopandas as gpd import pandas as pd from shapely.geometry import Point # 读取CSV df = pd.read_csv("你的数据文件.csv") # 把经纬度转为Point几何对象,注意顺序是(经度, 纬度) geometry = [Point(xy) for xy in zip(df["经度"], df["纬度"])] # 创建GeoDataFrame,指定坐标系为WGS84(EPSG:4326,全球通用的GPS坐标系) gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
3. 加载Shapefile底图
你需要一个对应区域的Shapefile(比如世界地图、中国地图),可以从公开数据源获取免费的低分辨率数据。拿到Shapefile后,用GeoPandas读取:
# 读取Shapefile,替换成你的Shapefile路径 world = gpd.read_file("你的Shapefile文件.shp") # 如果你只需要特定区域,比如中国,可以筛选 # china = world[world["name"] == "China"]
4. 绘制带分类变量的地图
现在把底图和你的点数据叠加,根据分类变量设置点的颜色或大小:
import matplotlib.pyplot as plt # 创建绘图对象 fig, ax = plt.subplots(figsize=(10, 8)) # 先画底图 world.plot(ax=ax, color="#f0f0f0", edgecolor="gray") # 再画你的点数据,根据分类变量(比如"分类列")设置颜色 gdf.plot(ax=ax, column="分类列", cmap="viridis", markersize=50, alpha=0.7, legend=True) # 设置标题和坐标轴 plt.title("基于分类变量的地理分布") plt.axis("off") # 显示或保存图 plt.show() # plt.savefig("地图结果.png", dpi=300)
5. 常见坑点解决
- 坐标系不匹配:如果你的GeoDataFrame和Shapefile坐标系不一样,会导致点画到错误位置。可以用
to_crs转换:# 把Shapefile转为和你的数据一样的坐标系(EPSG:4326) world = world.to_crs("EPSG:4326") - Shapefile文件不完整:Shapefile不是单个
.shp文件,还需要.shx、.dbf等配套文件,必须放在同一个文件夹里才能读取。
内容的提问来源于stack exchange,提问作者Dhyey Shaileshkumar Patel
相关产品推荐
相关产品推荐

