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

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.lryc.cn/news/587296.html

相关文章:

  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 【elementUI踩坑记录】解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题
  • QT控件命名简写
  • Burp suite的下载安装基础用法(密码喷洒,密码爆破)
  • Linux 系统——管理 MySQL
  • 超市管理系统
  • 问题记录:Fastjson序列化-空值字段处理
  • 数据结构 Map和Set
  • 零基础完全理解视觉语言模型(VLM):从理论到代码实践
  • ArkUI Inspector工具用法全解析
  • Redis 命令总结
  • react中为啥使用剪头函数
  • Redis技术笔记-从三大缓存问题到高可用集群落地实战
  • 【SpringBoot】注册条件+自动配置原理+自定义starter
  • 通信网络编程5.0——JAVA
  • 【STM32实践篇】:F407 时钟系统
  • [2025CVPR]GNN-ViTCap:用于病理图像分类与描述模型
  • XML实体扩展注入与防御方案
  • [Linux 入门] Linux 引导过程、系统管理与故障处理全解析
  • 强化学习 (11)随机近似
  • opencv python 基本操作
  • WEB渗透
  • 利用DeepSeek证明立体几何题目
  • Maven项目没有Maven工具,IDEA没有识别到该项目是Maven项目怎么办?
  • Prometheus Operator:Kubernetes 监控自动化实践
  • 05.判断日期是工作日还是周末
  • 学习python调用WebApi的基本用法(2)
  • 反射内存卡的使用
  • 进制转换结合tk可视化窗口
  • C++高频知识点(十三)