如何根据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
相关产品推荐
相关产品推荐

