使用 xarray 和 CORDEX 数据随时间绘制低压中心
Plotting low-pressure centers over time using xarray and CORDEX data
我想随着时间的推移绘制低压中心,作为 'tracking' 欧洲西北部极端风暴的一种方式。我可以通过绘制低压轮廓来做到这一点:
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 执行此操作的方法一定比我想象的更简单。
我最终想根据低压的严重程度和周围的风速(来自同一模型运行)绘制伪'storm tracks',所以也许轮廓函数是使用错误的?我不确定。
我只对 NW Europe 感兴趣,但我可以稍后将绘图的范围设置为仅包括该区域。
如果有任何帮助,我将不胜感激。最后,我想要一张简单的欧洲西北部地图,其中显示风暴轨迹及其在历史和未来时期的严重程度。
您可以使用 Open Source storm tracking software 或者您必须构建自己的解决方案。
如果您有兴趣开发自己的解决方案,我建议您使用算法来查找局部最小值(和最大值)
例如scipy 和 numpy 提供了良好的第一次尝试:
from scipy import signal
import numpy as np
minimums = signal.argrelextrema(ds.psl.values, np.less)
Antoher的想法是先推导梯度。为此,您可以使用 xarray.DataArray.differentiate
。高压或低压系统中心的梯度应为零。
我想随着时间的推移绘制低压中心,作为 'tracking' 欧洲西北部极端风暴的一种方式。我可以通过绘制低压轮廓来做到这一点:
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 执行此操作的方法一定比我想象的更简单。
我最终想根据低压的严重程度和周围的风速(来自同一模型运行)绘制伪'storm tracks',所以也许轮廓函数是使用错误的?我不确定。
我只对 NW Europe 感兴趣,但我可以稍后将绘图的范围设置为仅包括该区域。
如果有任何帮助,我将不胜感激。最后,我想要一张简单的欧洲西北部地图,其中显示风暴轨迹及其在历史和未来时期的严重程度。
您可以使用 Open Source storm tracking software 或者您必须构建自己的解决方案。
如果您有兴趣开发自己的解决方案,我建议您使用算法来查找局部最小值(和最大值)
例如scipy 和 numpy 提供了良好的第一次尝试:
from scipy import signal
import numpy as np
minimums = signal.argrelextrema(ds.psl.values, np.less)
Antoher的想法是先推导梯度。为此,您可以使用 xarray.DataArray.differentiate
。高压或低压系统中心的梯度应为零。