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

如何使用xarray仅沿指定红线插值外推气温数据?

问题:如何用xarray仅沿指定红线对气温进行插值与外推

我希望使用xarray沿图中红线对气温值进行插值和外推。参考了xarray官方文档的高级插值示例,但当前代码似乎在对整个区域进行插值,我只需要针对红线处理。如何将插值范围限定为仅红线?

原代码:

ds = xr.tutorial.open_dataset("air_temperature")
ds_mean = ds.air.mean(dim='time')

def line(x,A):
    return x, A*x

x, y = line(np.linspace(ds_mean.lon[0], ds_mean.lon[-1], 30), 0.1)
dsi = ds_mean.interp(lon=x, lat=y, kwargs={"fill_value":"extrapolate"})

fig, axes = plt.subplots(ncols=2, figsize=(10, 4))

ds_mean.plot(ax=axes[0],zorder=0, alpha=0.4)
axes[0].plot(x,y,'o',zorder=10)
axes[0].set_title("Mean Air")

dsi.plot(ax=axes[1])
axes[1].set_title("Mean air along one line")

问题分析

你当前用interp(lon=x, lat=y)的写法,会让x和y两个一维数组自动广播成二维网格,最终生成的dsi是一个二维数据集,所以绘图时会显示整个区域的插值结果,而非仅红线上的点。

解决方案

要限定仅对红线上的点进行插值/外推,需要把经度和纬度配对成离散点序列,而非让它们形成网格。可以通过interp的points参数来指定这些点:

import xarray as xr
import numpy as np
import matplotlib.pyplot as plt

ds = xr.tutorial.open_dataset("air_temperature")
ds_mean = ds.air.mean(dim='time')

def line(x,A):
    return x, A*x

# 生成红线上的坐标点对
lon_points, lat_points = line(np.linspace(ds_mean.lon[0], ds_mean.lon[-1], 30), 0.1)

# 将坐标点包装为DataArray,指定坐标维度
points = xr.DataArray(
    np.column_stack((lon_points, lat_points)),
    dims=["points", "coord"],
    coords={"coord": ["lon", "lat"]}
)

# 仅对指定点序列执行插值与外推
dsi = ds_mean.interp(points=points, kwargs={"fill_value":"extrapolate"})

fig, axes = plt.subplots(ncols=2, figsize=(10, 4))

# 左图:原始数据+红线点
ds_mean.plot(ax=axes[0], zorder=0, alpha=0.4)
axes[0].plot(lon_points, lat_points, 'ro', zorder=10)
axes[0].set_title("平均气温")

# 右图:红线上的插值结果(用折线+散点展示)
axes[1].plot(lon_points, dsi.values, 'b-', marker='o')
axes[1].set_xlabel("经度")
axes[1].set_ylabel("气温")
axes[1].set_title("红线上的平均气温(插值+外推)")

plt.tight_layout()
plt.show()

关键修改说明

  • 用np.column_stack把经度和纬度一一配对,避免生成二维网格
  • 通过xr.DataArray包装点序列,让xarray明确识别每个点的经度、纬度信息
  • 插值后的dsi是一维数组,对应红线上每个点的气温值,直接用折线/散点图展示即可,无需再用二维热力图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:34:57