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

使用Python Cartopy绘制颜色表温度、方块大小表不确定性的双变量地图

实现方案说明

不需要额外引入第三方依赖,仅用Matplotlib + Cartopy即可完成需求,核心通过Matplotlib的scatter接口的双参数映射能力实现:

  • 颜色映射:通过c参数传入温度变化数据,指定cmap='coolwarm'即可实现温度的颜色编码
  • 不确定性映射:通过marker='s'指定散点为方块形状,用s参数传入不确定性数据,可按需添加缩放系数调整方块的显示大小比例
核心实现步骤
  1. 正常定义Cartopy的地图投影、加载底图要素
  2. 准备好经纬度网格、温度变化、不确定性三组对齐的一维数据
  3. 调用ax.scatter传入参数:
    • 经纬度坐标、transform参数指定坐标参考系
    • c=温度变化数组、cmap='coolwarm'
    • marker='s'、s=不确定性数组 * 缩放系数(缩放系数按需调整到合适的显示尺寸)
  4. 调用plt.colorbar绑定scatter返回的对象生成温度色条,可通过调整norm等参数匹配你需要的色条效果
  5. 若需要展示不确定性对应的大小参考,可以单独自定义大小图例添加到画布合适位置
示例代码
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

# 模拟测试数据:100个随机分布的网格点
np.random.seed(42)
lon = np.random.uniform(-180, 180, 100)
lat = np.random.uniform(-90, 90, 100)
temp_change = np.random.uniform(-5, 5, 100)  # 温度变化范围-5~5℃
uncertainty = np.random.uniform(0.1, 3, 100)  # 不确定性范围0.1~3℃

# 初始化Cartopy地图
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.coastlines(linewidth=0.5)
ax.gridlines(draw_labels=True, linestyle='--', alpha=0.7)

# 绘制方块散点
scatter = ax.scatter(
    lon, lat,
    c=temp_change,
    cmap='coolwarm',
    marker='s',  # 方块标记
    s=uncertainty * 30,  # 不确定性乘缩放系数调整大小
    alpha=0.8,
    transform=ccrs.PlateCarree()
)

# 添加温度色条
cbar = plt.colorbar(scatter, ax=ax, pad=0.1)
cbar.set_label('温度变化 (℃)')

# 可选:添加不确定性大小图例
for size in [0.5, 1, 2, 3]:
    ax.scatter([], [], c='gray', marker='s', s=size*30, label=f'{size} ℃')
ax.legend(scatterpoints=1, frameon=True, labelspacing=1, title='不确定性', bbox_to_anchor=(1.2, 0.3))

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:04