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

如何在Matplotlib中基于数值填充Shapefile多边形颜色

如何根据数值为Shapefile多边形填充渐变颜色?

没问题,我来帮你实现根据字典数值给对应ID的多边形分配渐变颜色的需求。核心思路是利用Matplotlib的**颜色映射(Colormap)和数值归一化(Normalize)**工具,把你的数值范围映射到对应的颜色区间,然后逐个匹配多边形的ID来分配颜色。

步骤说明与修改后的代码

首先,我们需要额外导入matplotlib.colors.Normalize来处理数值归一化,然后通过Matplotlib内置的颜色映射来生成对应颜色。另外,还可以添加颜色条来直观展示数值和颜色的对应关系:

import matplotlib.pyplot as plt
import pypyodbc
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.colors import Normalize  # 新增:用于数值归一化
import numpy as np

# 你的数值字典
dict1 = {14464: 1.16, 14465: 1.35, 14466: 1.28, 14467: 1.69, 14468: 1.81, 14418: 1.38}

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)

# 初始化Basemap
m = Basemap(projection='cyl', llcrnrlat=34.5, llcrnrlon=19, urcrnrlat=42, urcrnrlon=28.5, resolution='h')
m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='#ddaa66', lake_color='aqua')
m.drawcoastlines()
m.readshapefile('nomoi', 'nomoi')

# 1. 处理数值范围:获取字典中数值的最大最小值,用于归一化
vmin = min(dict1.values())
vmax = max(dict1.values())

# 2. 创建归一化对象和颜色映射
norm = Normalize(vmin=vmin, vmax=vmax)
# 可以选择其他内置颜色映射,比如plt.cm.plasma、plt.cm.jet,或者自定义
cmap = plt.cm.viridis

patches = []
colors = []

# 3. 遍历多边形,匹配ID并分配对应颜色
for info, shape in zip(m.nomoi_info, m.nomoi):
    id_2 = info['ID_2']
    if id_2 in dict1:
        # 根据数值获取对应的颜色
        color = cmap(norm(dict1[id_2]))
        patches.append(Polygon(np.array(shape), True))
        colors.append(color)

# 4. 创建PatchCollection并添加到轴上
pc = PatchCollection(patches, edgecolor='k', linewidths=1., zorder=2)
pc.set_facecolors(colors)  # 设置每个多边形的填充色
ax.add_collection(pc)

# 5. 添加颜色条,展示数值与颜色的对应关系
sm = plt.cm.ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([])  # 只需要关联归一化和颜色映射,不需要数据数组
plt.colorbar(sm, ax=ax, label='数值')

plt.show()

关键部分解释

  • 数值归一化:Normalize(vmin=vmin, vmax=vmax)会把你的数值范围(1.16到1.81)映射到0到1之间,这样颜色映射才能正确对应到整个颜色区间。
  • 颜色映射:plt.cm.viridis是Matplotlib内置的一款色盲友好的颜色映射,你可以根据需求换成其他内置映射,比如plt.cm.plasma、plt.cm.RdYlBu等。
  • 颜色匹配:遍历每个多边形时,检查ID_2是否在你的字典中,如果存在,就通过cmap(norm(数值))得到对应的RGBA颜色值。
  • 颜色条:通过ScalarMappable把归一化和颜色映射关联起来,生成颜色条,让观看者能快速理解颜色对应的数值含义。

这样修改后,每个匹配ID_2的多边形都会根据字典里的数值填充对应的渐变颜色啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:32:19