当前位置: 首页 > ops >正文

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海洋专题】历史汇总

http://www.xdnf.cn/news/15331.html

相关文章:

  • 代理模式:控制对象访问
  • Spring AI 项目实战(十七):Spring Boot + AI + 通义千问星辰航空智能机票预订系统(附完整源码)
  • 无缝衔接直播流体验
  • 数据结构 单链表(1)
  • Acrobat 表单中的下拉菜单(附示例下载)
  • ESP-Timer入门(基于ESP-IDF-5.4)
  • 插入类排序的C语言实现
  • Java小白-设计模式
  • C#单例模式管理全局变量
  • OSPF与BGP的联动特性实验案例
  • OSPF与BGP的联动特性
  • Java设计模式之行为型模式(命令模式)
  • 单例模式:确保全局唯一实例
  • Vue文件上传实战指南
  • 【OpenGL 渲染器开发笔记】1 为什么要设计渲染器?
  • Dubbo-Admin 安装与使用指南:可视化管理 Dubbo 服务
  • 初识drag2框架,drag2注入的基本原理
  • 常用的docker命令备份
  • k8s:0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims.
  • 论文Review 3DGSSLAM GauS-SLAM: Dense RGB-D SLAM with Gaussian Surfels
  • 使用python操作文件夹
  • Hashtable 与 HashMap 的区别笔记
  • [GWCTF 2019]我有一个数据库
  • 05.判断日期是工作日还是周末
  • 改进广告投入与销售额预测分析
  • JavaSE-多态
  • 从架构到代码:飞算JavaAI电商订单管理系统技术解构
  • [CH582M入门第六步]软件IIC驱动AHT10
  • 算法题(174):全排列问题
  • 归并排序递归法和非递归法的简单简单介绍