当前位置: 首页 > 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.dtcms.com/a/277191.html

相关文章:

  • 多级@JsonTypeInfo和@JsonSubTypes注解使用详解及场景分析
  • 剑指offer59_翻转单词顺序
  • Redis 命令总结
  • Docker三剑客
  • Docker 基于 Cgroups 实现资源限制详解【实战+源码】
  • 从一个想法到一套软件——我的AI质检平台设计蓝图
  • 03.Python 字符串中的空白字符处理
  • 【爬虫】02 - 静态页面的抓取和解析
  • HTTP与HTTPS详解
  • 面试150 填充每个节点的下一个右侧节点指针Ⅱ
  • python函数快捷的传变量地址
  • 2025江苏省信息安全管理与评估赛项二三阶段任务书
  • docker 设置代理以及配置镜像加速
  • 【C++】优先队列简介与模拟实现 + 仿函数
  • Matplotlib(一)- 数据可视化与Matplotlib
  • 关于数据库的慢查询
  • python3的可变参数如何传递元组和字典
  • 一文讲懂填充与步幅
  • 《Google 软件工程》:如何写好文档?
  • 3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • 手写muduo笔记
  • package.json 与 package-lock.json
  • 笔记/sklearn中的数据划分方法
  • 流程控制:从基础结构到跨语言实践与优化
  • 博客项目 laravel vue mysql 第五章 标签功能
  • 前端性能优化利器:懒加载技术原理与最佳实践