python 画2023-24 年厄尔尼诺的海温与海表高度异常分布图

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

python 画2023-24 年厄尔尼诺的海温与海表高度异常分布图

python 画2023-2024厄尔尼诺期间的海表面温度异常和海表面高度异常分布图

2023-24 年厄尔尼诺的海温与海表高度异常
在研究气候异常事件如厄尔尼诺(El Niño)时,**海表温度异常(SSTA)和海表高度异常(SLA)**是两个关键指标。今天我们来详细解析一幅图它呈现了 2023-24 年厄尔尼诺期间的 SSTA 与 SLA 空间分布。

图片在这里插入图片描述

🔍 这幅图展示了什么?
我们绘制的是:

背景色彩填图(contourf):2023 年 6 月至 2024 年 1 月的SSTA(单位:°C)

白色等值线(contour):增强海温结构的等温线,很弱

黑色/灰色等高线:对应时段的 SLA 正/负异常(单位:米)

虚线赤道:地理标识

灰色轮廓线:陆地边界或研究区域边界

📍地图设置
proj = ccrs.PlateCarree(central_longitude=180)
fig = plt.figure(figsize=(12.5,12.5))
ax1=fig.add_subplot(421)

这里采用 PlateCarree(等距经纬)投影,中心经线设为 180°,更好地展示太平洋区域。

🌡️ 绘制海温异常 SSTA

ctrf = ax1.contourf(xx1,yy1,sstanom2023JuntoJan[:,:],levels=levels1,
extend=‘both’,norm=norm1,cmap=newcolor1)

sstanom2023JuntoJan 是从 .mat 文件读取的海温异常数据(单位 °C)

levels1 = np.arange(-2.0, 2.01, 0.2) 设定了颜色分级范围

使用自定义蓝红渐变色图(newcolor1)高亮冷暖异常区域

白色细线再叠加一层:

ax1.contour(xx1, yy1, sstanom2023JuntoJan, levels=np.arange(-6,6.01,0.6), colors=‘white’, linewidths=0.1)

🌊 添加海表高度异常 SLA 的等值线

ax1.contour(xx3,yy3,sla2023JuntoJan[:,:],levels=levels1a, colors=‘k’, linestyles=‘solid’, linewidths=1)
ax1.contour(xx3,yy3,sla2023JuntoJan[:,:],levels=levels1b, colors=‘grey’, linestyles=‘solid’, linewidths=1)

sla2023JuntoJan 为 SLA 数据

levels1a 是 SLA 的正异常(黑色线),levels1b 为负异常(灰色线)

通过海温与海表高度共同呈现,可揭示海洋热膨胀与风应力等动力学过程的耦合关系。

📐 坐标轴与美化
ax1.axhline(y=0, c=‘grey’, ls=‘–’, lw=1) 添加赤道线

ax1.set_title(‘a. SSTA & SLA (2023-24 El Niño)’, loc=‘left’, fontsize=16) 设置图标题

设置经纬度范围:

ax1.set(xlim=(130, 290), ylim=(-25, 25))

对应从西太平洋(130°E)到东太平洋(100°W),覆盖典型 ENSO 区域

自定义经纬度标签,如:

ax1.set_xticklabels([‘140 E’,‘180’,‘140 W’,‘100 W’],fontsize=16)
ax1.set_yticklabels([‘20 S’,‘10 S’,‘Eq’,‘10 N’,‘20 N’],fontsize=16)

色阶直观,负值为冷异常,正值为暖异常

SLA 轮廓线用于辅助判断热胀冷缩、风应力隆起/下陷效应

赤道线与陆地轮廓便于地理定位

一图洞察海洋变化
“图 ”整合了两个关键变量,有效展示了 2023-24 年厄尔尼诺期间热带太平洋的异常状态。此类图像是理解 ENSO 现象海气耦合机制的利器,

参考文献:

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

代码:

==start=

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
from matplotlib.colors import Normalize, ListedColormap
import scipy.io as scio
import cmaps

读取数据

mat_contents = scio.loadmat(r’Fig1.mat’)
for var_name, var_value in mat_contents.items():
exec(f’{var_name} = var_value’)

网格定义

xx1, yy1 = np.meshgrid(lon, lat)
xx3, yy3 = np.meshgrid(loninterp, latinterp)

colormap 和 levels 设置

cmapcolor = cmaps.GMT_polar
newcoloraa = cmapcolor(np.linspace(0, 1, 100))
new = np.vstack((newcoloraa[10:40, :], newcoloraa[60:90, :]))
newcolor1 = ListedColormap(new)
norm1 = Normalize(vmin=-2.0, vmax=2.0)
levels1 = np.arange(-2.0, 2.01, 0.2)
levels1a = np.arange(0.04, 0.241, 0.04)
levels1b = np.arange(-0.24, -0.039, 0.04)

画图

fig = plt.figure(figsize=(8, 4))
ax = fig.add_subplot(111)

填色图

ctrf = ax.contourf(xx1, yy1, sstanom2023JuntoJan, levels=levels1, extend=‘both’,
norm=norm1, cmap=newcolor1)

SSTA 白色等值线

ax.contour(xx1, yy1, sstanom2023JuntoJan, levels=np.arange(-6, 6.01, 0.6),
linestyles=‘solid’, colors=‘white’, linewidths=0.1)

赤道线

ax.axhline(y=0, c=‘grey’, ls=‘–’, lw=1)

SLA 黑/灰等值线

ax.contour(xx3, yy3, sla2023JuntoJan, levels=levels1a, colors=‘k’, linestyles=‘solid’, linewidths=1)
ax.contour(xx3, yy3, sla2023JuntoJan, levels=levels1b, colors=‘grey’, linestyles=‘solid’, linewidths=1)

海岸线

ax.plot(clx, cly, c=‘grey’, linewidth=1)

坐标设置

ax.set_xlim(130, 290)
ax.set_ylim(-25, 25)
ax.set_xticks(np.arange(140, 281, 40))
ax.set_xticklabels([‘140 E’, ‘180’, ‘140 W’, ‘100 W’], fontsize=14)
ax.set_yticks(np.arange(-20, 21, 10))
ax.set_yticklabels([‘20 S’, ‘10 S’, ‘Eq’, ‘10 N’, ‘20 N’], fontsize=14)

坐标轴刻度样式

ax.tick_params(length=5, width=2, labelsize=14)
ax.xaxis.set_major_locator(MultipleLocator(40))
ax.xaxis.set_minor_locator(MultipleLocator(10))
ax.yaxis.set_major_locator(MultipleLocator(10))
ax.yaxis.set_minor_locator(MultipleLocator(5))

标题

ax.set_title(’ SSTA & SLA (2023-24 El Niño)', loc=‘left’, fontsize=16)

colorbar

cb = fig.colorbar(ctrf, ax=ax, orientation=‘vertical’, pad=0.02,
ticks=np.arange(-2, 2.01, 1), extend=‘both’)
cb.ax.tick_params(labelsize=14)
cb.set_label(‘SSTA (°C)’, fontsize=14)

plt.tight_layout()

fig.savefig(r’Fig1_gong.png’,dpi=500, bbox_inches = ‘tight’, pad_inches = 0.03)

plt.show()

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋与大气科学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值