问题描述
我想随着时间的推移绘制低压中心,作为“追踪”整个西北欧洲的极端风暴的一种方式。我可以通过这样绘制低压轮廓来做到这一点:
import pandas as pd
import matplotlib.pyplot as plt
import xarray
ds = xarray.open_mfdataset('D:\Data\CORDEX\Historical\*.nc')
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);
这向我显示了低压值的轮廓,如下所示:
这很好,但是并不能真正满足我的要求。理想情况下,我希望在地图上绘制低压低压中心的一个点,然后能够在每个时间步长上跟踪低压,产生一条线或一系列点以显示低压的进程压力中心随时间变化。
由于我想在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
。在高压或低压系统的中心,梯度应为零。