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

如何将两个xarray Dataset绘制到同一图中并实现掩蔽效果?

实现步骤与代码示例

以下是直接满足需求的完整代码方案,基于xarray与cartopy实现:

import xarray as xr
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

# 1. 模拟匹配的两个数据集(替换为你的实际数据)
lon = np.linspace(0, 180, 30)
lat = np.linspace(-90, 90, 30)

# Dataset1:待显示的主数据
data1 = np.random.randn(len(lat), len(lon)) + 2
ds1 = xr.Dataset(
    {'var1': (['lat', 'lon'], data1)},
    coords={'lat': lat, 'lon': lon}
)

# Dataset2:用于生成掩蔽规则的数据集(值为0的区域需要掩蔽)
data2 = np.random.randint(0, 2, size=(len(lat), len(lon)))
ds2 = xr.Dataset(
    {'var2': (['lat', 'lon'], data2)},
    coords={'lat': lat, 'lon': lon}
)

# 2. 生成掩蔽掩码
mask = ds2['var2'] == 0

# 3. 绘图流程
fig, ax = plt.subplots(
    figsize=(10, 6),
    subplot_kw={'projection': ccrs.PlateCarree()}
)

# 绘制Dataset1的主色图(保留coolwarm配色)
ds1['var1'].plot(
    ax=ax,
    cmap='coolwarm',
    transform=ccrs.PlateCarree(),
    cbar_kwargs={'label': 'Dataset1 变量'}
)

# 叠加掩蔽区域:绿色填充Dataset2值为0的区域
ax.contourf(
    ds1['lon'], ds1['lat'], mask,
    levels=[0.5, 1.5],  # 精准选中布尔值为True的区域(True对应数值1)
    colors='green',
    transform=ccrs.PlateCarree(),
    alpha=0.5  # 可选:设置透明度,避免完全覆盖主数据
)

# 添加地图基础元素
ax.coastlines()
ax.gridlines(draw_labels=True)

plt.title('Dataset1 叠加 Dataset2 掩蔽区域(绿色)')
plt.show()

核心细节说明:

  • 掩码生成:通过ds2['var2'] == 0生成布尔数组,True即为需要掩蔽的目标区域
  • 掩蔽绘制:使用contourf绘制掩码区域,levels=[0.5,1.5]的设置可以精准筛选出布尔值为True的区域(布尔数组在计算时True=1,False=0)
  • 透明度控制:alpha=0.5让绿色掩蔽区半透明,若需要完全覆盖主数据可删除该参数
  • 坐标兼容:由于两个数据集的经纬度维度完全一致,直接复用Dataset1的坐标即可完成绘图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:25:01