使用xarray和CORDEX数据随时间绘制低压中心

问题描述

我想随着时间的推移绘制低压中心,作为“追踪”整个西北欧洲的极端风暴的一种方式。我可以通过这样绘制低压轮廓来做到这一点:

import pandas as pd
import matplotlib.pyplot as plt
import xarray

ds = xarray.open_mfdataset('D:\Data\CORDEX\Historical\*.nc')
ds

Printout of ds

plot = ds.psl[0].plot()
plot = ds.psl.isel(time=0).plot.contour('lon','lat',levels=12,cmap = 'RdBu_r',vmax = 99000,ax=ax);

这向我显示了低压值的轮廓,如下所示:

enter image description here

这很好,但是并不能真正满足我的要求。理想情况下,我希望在地图上绘制低压低压中心的一个点,然后能够在每个时间步长上跟踪低压,产生一条线或一系列点以显示低压的进程压力中心随时间变化。

由于我想在150年内对3个小时的数据执行此操作,因此我认为使用xarray进行此操作必须比我能想到的更简单。

我最终想根据低压的严重程度和周围的风速绘制伪“风暴轨迹”(来自同一模型运行),因此轮廓函数可能是错误的选择?我不确定。

我只对NW Europe感兴趣,但是我可以稍后将图的范围设置为仅包括该区域。

非常感谢您的帮助。最后,我想要一张简单的NW欧洲地图,其中显示了风暴轨迹及其在历史和未来时期的严重程度。

解决方法

您可以使用Open Source storm tracking software,或者必须构建自己的解决方案。

如果您有兴趣开发自己的解决方案,我建议使用算法来查找局部最小值(和最大值)

例如scipy和numpy提供了很好的首次尝试:

from scipy import signal
import numpy as np

minimums = signal.argrelextrema(ds.psl.values,np.less)

另一个想法是先得出梯度。您可以为此使用xarray.DataArray.differentiate。在高压或低压系统的中心,梯度应为零。