python赤道上空的大气环流剖面图(纬向-高度剖面)
python赤道上空的大气环流剖面图(纬向-高度剖面)
python赤道上空的大气环流剖面图(纬向-高度剖面)
图片
该图展示的是:
去趋势后的垂直速度异常(单位为 Pa/s,负号表示上升);
时间平均范围:2023年6月到12月;
区域:赤道带(Equatorial)的印度洋和大西洋合并区;
横轴:经度 lon,范围 0°–360°;
纵轴:深度 lev,范围 0–500 m(注意使用 invert_yaxis() 使深度向下);
颜色:表示垂直速度 ω,配色方案为绿色–白–紫色渐变(GreenMagenta16 + 白色插入);
白色等值线用于强调垂直速度的细节变化。
图像解读要点
垂直速度 ω 异常用于反映海洋上升/下沉运动,是动力过程(如 ENSO)反馈的重要指标。
绿色表示下沉(正值),紫色表示上升(负值);
图中区域若呈紫色且数值为负,说明存在上升流;
ω < -0.01 Pa/s 通常可以认为是显著的上升运动。
图展示了赤道上空大气环流在经度-高度剖面上的异常结构,是热带环流变化研究中的重要诊断图之一。
import sys
sys.path.append(r’C:\Program Files\python’)
print(sys.path)
import matplotlib as mpl
import h5py
import numpy as np
import xarray as xr
import matplotlib as mpl
from scipy import signal
from scipy.signal import convolve2d
from scipy import stats
from scipy.interpolate import interp2d
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeat
import cartopy.mpl.ticker as cticker
from creat_map import *
import cmaps
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.colors as colors
from matplotlib.colors import ListedColormap
import scipy.io as scio
from cartopy.util import add_cyclic_point
mat_contents = scio.loadmat(r’Fig3.mat’)
for var_name, var_value in mat_contents.items():
exec(f’{var_name} = var_value’)
vnorm = colors.Normalize(vmin=19.0, vmax=26.0)
timemm = np.arange(1, 12.1, 1)
xx1, yy1 = np.meshgrid(loninterp, timemm)
xx2, yy2 = np.meshgrid(lon, lev[0:11])
cmapcolorwithwhite = cmaps.GrayWhiteGray
newcolorwithwhite = cmapcolorwithwhite(np.linspace(0, 1, 40))
cmapcolor = cmaps.GMT_polar
newcoloraa = cmapcolor(np.linspace(0, 1, 100))
new = np.vstack((newcoloraa[1:35:1, :], newcolorwithwhite[18:23, :], newcoloraa[60:95:1, :]))
newcolor1 = ListedColormap(new)
cmapcolor = cmaps.GreenMagenta16
newcoloraa = cmapcolor(np.linspace(0, 1, 100))
new = np.vstack((newcoloraa[20:40:1, :], newcolorwithwhite[19:23, :], newcoloraa[60:80:1, :]))
newcolor2 = ListedColormap(new)
levels1 = np.arange(-0.036, 0.0361, 0.003)
norm1 = colors.Normalize(vmin=-0.036, vmax=0.036)
levels2 = np.arange(-0.02, 0.021, 0.002)
norm2 = colors.Normalize(vmin=-0.02, vmax=0.02)
fig = plt.figure(figsize=(14.5, 12.8))
fig.subplots_adjust(wspace=0.15, hspace=0.20)
ax1 = fig.add_subplot(111)
mmm = np.arange(6, 13)
omegaen2023anomEQplot = np.transpose(np.nanmean(omegaen2023anomEQ[:, :, mmm - 1], axis=2))
omegaen2023anomEQplot0 = omegaen2023anomEQplot
uen2023anomEQplot = np.transpose(np.nanmean(uen2023anomEQ[:, :, mmm - 1], axis=2))
speed = np.sqrt(uen2023anomEQplot ** 2 + (200 * omegaen2023anomEQplot) ** 2)
uen2023anomEQplot[speed < 0.1] = np.nan
omegaen2023anomEQplot[speed < 0.1] = np.nan
omegaenPACdetrend2023anomEQplot = np.transpose(np.nanmean(omegaenPACdetrend2023anomEQ[:, :, mmm - 1], axis=2))
omegaenPACdetrend2023anomEQplot0 = omegaenPACdetrend2023anomEQplot
uenPACdetrend2023anomEQplot = np.transpose(np.nanmean(uenPACdetrend2023anomEQ[:, :, mmm - 1], axis=2))
speed = np.sqrt(uenPACdetrend2023anomEQplot ** 2 + (200 * omegaenPACdetrend2023anomEQplot ** 2))
uenPACdetrend2023anomEQplot[speed < 0.1] = np.nan
omegaenPACdetrend2023anomEQplot[speed < 0.1] = np.nan
omegaenINDATLdetrend2023anomEQplot = np.transpose(np.nanmean(omegaenINDATLdetrend2023anomEQ[:, :, mmm - 1], axis=2))
omegaenINDATLdetrend2023anomEQplot0 = omegaenINDATLdetrend2023anomEQplot
uenINDATLdetrend2023anomEQplot = np.transpose(np.nanmean(uenINDATLdetrend2023anomEQ[:, :, mmm - 1], axis=2))
speed = np.sqrt(uenINDATLdetrend2023anomEQplot ** 2 + (200 * omegaenINDATLdetrend2023anomEQplot ** 2))
uenINDATLdetrend2023anomEQplot[speed < 0.1] = np.nan
omegaenINDATLdetrend2023anomEQplot[speed < 0.1] = np.nan
omegaentrend2023anomEQplot = np.transpose(np.nanmean(omegaentrend2023anomEQ[:, :, mmm - 1], axis=2))
omegaentrend2023anomEQplot0 = omegaentrend2023anomEQplot
uentrend2023anomEQplot = np.transpose(np.nanmean(uentrend2023anomEQ[:, :, mmm - 1], axis=2))
speed = np.sqrt(uentrend2023anomEQplot ** 2 + (200 * omegaentrend2023anomEQplot ** 2))
uentrend2023anomEQplot[speed < 0.1] = np.nan
omegaentrend2023anomEQplot[speed < 0.1] = np.nan
ymajorLocator = MultipleLocator(100)
ymajorFormatter = FormatStrFormatter(‘%1.0f’)
yminorLocator = MultipleLocator(50)
xmajorLocator = MultipleLocator(20)
xmajorFormatter = FormatStrFormatter(‘%1.0f’)
xminorLocator = MultipleLocator(10)
ctrf = ax1.contourf(xx2, yy2, -omegaenINDATLdetrend2023anomEQplot0, levels=levels2, extend=‘both’, norm=norm2,
cmap=newcolor2)
ax1.contour(xx2, yy2, -omegaenINDATLdetrend2023anomEQplot0, levels=np.arange(-0.06, 0.061, 0.003),
colors=‘white’, linestyles=‘solid’, linewidths=0.3)
ax1.set_title(‘e. Omega & Circulation (aIndAtl)’, loc=‘left’, fontsize=16)
ax1.set_title(‘’, loc=‘right’, fontsize=16)
gapnum1 = 1
gapnum2 = 10
m = ax1.quiver(xx2[::gapnum1, ::gapnum2], yy2[::gapnum1, ::gapnum2],
uenINDATLdetrend2023anomEQplot[::gapnum1, ::gapnum2],
-200 * omegaenINDATLdetrend2023anomEQplot[::gapnum1, ::gapnum2],
zorder=2,
pivot=‘middle’,
scale=50, width=0.004, headwidth=3, color=‘black’)
qk = ax1.quiverkey(m, 0.95, 1.05, 2, ‘2’, labelpos=‘E’, color=‘black’, labelcolor=‘black’, fontproperties={‘size’: 15})
ax1.grid(False)
ax1.tick_params(length=5, width=2, labelsize=16)
ax1.yaxis.set_major_locator(ymajorLocator)
ax1.yaxis.set_major_formatter(ymajorFormatter)
ax1.yaxis.set_minor_locator(yminorLocator)
ax1.xaxis.set_major_locator(xmajorLocator)
ax1.xaxis.set_major_formatter(xmajorFormatter)
ax1.xaxis.set_minor_locator(xminorLocator)
ax1.set_xticks(np.arange(0, 360.1, 60))
ax1.set_xticklabels([“0”, “60E”, “120E”, “180”, “120W”, “60W”, “0”])
ax1.set_yticks(np.arange(200, 1000.1, 200))
ax1.set(xlim=(0, 360), ylim=(1050, 50));
ax1.yaxis.set_major_formatter(plt.NullFormatter())
position = fig.add_axes([0.915, 0.15, 0.01, 0.7])
cb = fig.colorbar(ctrf, cax=position, orientation=‘vertical’,
ticks=np.arange(-0.02, 0.021, 0.02), fraction=.5, extend=‘both’)
cb.ax.tick_params(labelsize=14)
cb.set_label(f’Omega (Pa/s)‘, fontsize=16)
fig.savefig(r’Fig31.png’, dpi=500, bbox_inches=‘tight’, pad_inches=0.03)
plt.show()
参考文献:
Tao Lian, Jie Wang, Dake Chen, Ting Liu, Dazhi Wang.
A Strong 2023/24 El Niño is Staged by Tropical Pacific Ocean Heat Content Buildup. Ocean-Land-Atmos Res. 2023;2:0011.DOI:10.34133/olar.0011
python 赤道温度距平剖面图==赤道海温剖面揭秘 2023/24 厄尔尼诺的强烈信号
python厄尔尼诺期间温度海表面高度的时间演变分布图
python 历年Nino3区海温异常与中太平洋风速的关系 ===散点线性图
python 2023–2024年厄尔尼诺期间的平均海平面气压(MSLP)和风场(wind)
python 画2023-24 年厄尔尼诺的海温与海表高度异常分布图
【PYTHON海洋专题】历史汇总