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

如何用Python关联.shp网格与.csv数据并实现栅格值可视化?

别担心,用GeoPandas完全能搞定这个需求,我给你一步步拆解实现方法,代码都写好了,跟着来就行~

实现步骤详解

1. 先安装必要的库

首先得确保你装了处理空间数据和绘图的核心库,打开终端执行:

pip install geopandas matplotlib

2. 加载并关联数据

我们需要把shp网格和csv数据通过cell_id合并到一起,先分别加载两个文件,再做关联:

import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt

# 加载shp网格文件,替换成你的文件路径
grid_gdf = gpd.read_file("你的网格文件路径.shp")

# 加载csv数据,替换成你的文件路径
csv_df = pd.read_csv("你的csv文件路径.csv")

# 通过cell_id合并数据:inner模式只保留两边都存在的cell_id
# 如果想保留所有网格(哪怕csv里没对应数据),可以把how改成"left"
merged_gdf = grid_gdf.merge(csv_df, on="cell_id", how="inner")

小提示:解决cell_id匹配失败的问题

如果合并后发现数据少了很多,大概率是cell_id的类型不匹配(比如shp里是字符串,csv里是整数),可以统一类型:

# 把csv里的cell_id转成字符串,和shp保持一致
csv_df["cell_id"] = csv_df["cell_id"].astype(str)

3. 可视化:数值越高颜色越暗

接下来就是绘图了,我们用反向的灰度色系(Greys_r)来实现“数值越高颜色越暗”的效果,也可以换成OrRd_r这类反向的暖色系,看你偏好:

# 创建绘图画布,调整尺寸让显示更清晰
fig, ax = plt.subplots(figsize=(10, 10))

# 绘制网格,用csv里的数值列映射颜色
merged_gdf.plot(
    column="你的数值列名称",  # 替换成csv里存储数值的列名,比如"traffic_count"
    cmap="Greys_r",  # 反向灰度图,数值越高颜色越暗
    ax=ax,
    edgecolor="white",  # 用白色边框区分每个单元格
    legend=True,  # 显示颜色图例
    legend_kwds={"label": "单元格数值", "orientation": "horizontal"}  # 自定义图例样式
)

# 去掉坐标轴,让图形更整洁
ax.set_axis_off()

# 显示最终图形
plt.show()

额外注意事项

  • 确保shp的附属文件(.shx、.dbf等)和主shp文件在同一个文件夹里,不然GeoPandas会加载失败
  • 如果csv里有缺失的数值,可以用merged_gdf.dropna(subset=["你的数值列名称"])删除空值行,或者用fillna(0)填充默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:34