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

如何根据Shapefile多边形的PhytoNAOCo值为指定区域分配颜色?

解决方法

不用写循环,用GeoPandas的布尔索引就能轻松筛选出0值和非0值的多边形,分开绘制即可。另外注意你的代码里同时用了geopandas.plot和Basemap,得确保两者在同一个matplotlib轴上渲染,避免图层覆盖问题。

以下是修改后的完整代码:

# 安装依赖(未安装时执行)
# pip install geopandas contextily basemap

import geopandas as gpd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# 读取Shapefile数据
data = gpd.read_file("NAOAMOCorrEcoRegion.shp")

# 创建matplotlib画布和轴
fig, ax = plt.subplots(figsize=(12, 10))

# 1. 绘制非0值的多边形,使用指定颜色映射
non_zero = data[data["PhytoNAOCo"] != 0.00]
non_zero.plot(column="PhytoNAOCo", legend=True, cmap='bwr', ax=ax)

# 2. 绘制0值的多边形,设置为白色
zero_values = data[data["PhytoNAOCo"] == 0.00]
zero_values.plot(color="white", ax=ax)

# 初始化Basemap并绘制底图元素
map = Basemap(llcrnrlon=-50, llcrnrlat=30, urcrnrlon=50., urcrnrlat=80.,
              resolution='i', lat_0=39.5, lon_0=1, ax=ax)
map.fillcontinents(color='lightgreen')
map.drawcoastlines()

# 设置标题
plt.title("Correlation")
plt.show()

关键说明:

  • 布尔索引筛选数据:data[data["PhytoNAOCo"] == 0.00]直接筛选值为0的多边形,data[data["PhytoNAOCo"] != 0.00]筛选非0值,这是Pandas/GeoPandas的标准高效用法,比循环简洁得多。
  • 图层顺序:先画非0值多边形,再画白色0值多边形,最后叠加Basemap底图元素,保证图层显示层级正确。
  • 共享轴:提前创建fig, ax,把ax参数传递给所有绘图方法,让所有操作在同一个轴上进行,避免出现多个画布的问题。

如果数据里存在NaN空值,可改用data[data["PhytoNAOCo"].notna() & (data["PhytoNAOCo"] != 0.00)]来同时排除空值和0值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:35:23