4. 温盐剖面可视化基础
温盐剖面数据最常见的三种基础图形是温度-深度曲线(T-D)、盐度-深度曲线(S-D)和温度-盐度点聚图(T-S)。它们分别回答三个不同的问题:温度随深度如何变化、盐度随深度如何变化、以及水团在温盐参数空间中落在什么位置。理解这三种图的坐标约定与绘制细节,是后续剖面分析、水团识别和异常排查的基础。
一、坐标约定:深度向下为正
海洋剖面图与一般数学曲线最大的差别在于纵轴方向。海洋学惯例是深度向下增大,因此绘图时必须反转纵轴,否则读者会把“深层”误读为“高空”。在 Matplotlib 中通过 ax.invert_yaxis() 实现。同时,深度通常作为纵轴、温盐作为横轴,这样剖面形态与真实水体上下关系一致。本节所有图示与代码均采用“深度向下为正、纵轴反转”的约定。
另一个约定是单位:温度用摄氏度(℃),盐度用实用盐度(无量纲,常写作 PSU 或 1),深度用米(m)。绘图时应在轴标签中写明单位,避免后续与位温、绝对盐度混淆。
二、三种基础图形的分工
温度-深度曲线把温度放在横轴、深度放在纵轴,能直观看出温跃层的位置和强度:曲线在某深度段斜率陡峭,说明温度梯度大,即温跃层。盐度-深度曲线同理,用于观察盐跃层与盐度垂向结构。T-S 点聚图则把每个采样点的温度和盐度作为一对坐标投到平面上,深度信息不再作为坐标轴,而是通过点的颜色或大小编码,从而观察水团在温盐空间中的聚集形态与混合线。
上图把三种图并列展示:左、中两幅以深度为纵轴,突出垂向结构;右幅以温度、盐度为平面坐标,突出水团位置与混合关系。实际分析中三者常配合使用——先用 T-D 和 S-D 定位跃层深度,再用 T-S 图判断水团来源与混合过程。
三、用 Matplotlib 绘制剖面曲线
假设已从 CTD 数据中整理出三个等长数组:depth(深度,m)、temp(温度,℃)、sal(盐度,1)。绘制温度-深度曲线的最小代码如下:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(8, 6), sharey=True)
axes[0].plot(temp, depth, color="#e07a3f", lw=2)
axes[0].set_xlabel("温度 / ℃")
axes[0].set_ylabel("深度 / m")
axes[0].set_title("温度-深度曲线")
axes[1].plot(sal, depth, color="#2f9e8f", lw=2)
axes[1].set_xlabel("盐度 / 1")
axes[1].set_title("盐度-深度曲线")
for ax in axes:
ax.invert_yaxis() # 深度向下为正
ax.grid(alpha=0.3)
plt.tight_layout()
plt.savefig("profile_td_sd.png", dpi=150)
关键点有三:sharey=True 让两幅图共用深度轴,便于横向对照跃层深度;invert_yaxis() 保证深度向下;grid(alpha=0.3) 用浅网格辅助读数而不喧宾夺主。若数据中存在缺测值(如 NaN),Matplotlib 会自动断开曲线,这通常正是我们想要的——缺测段不应被直线连接。
四、T-S 点聚图的绘制与深度编码
T-S 图的核心是把温度、盐度作为平面坐标,并用颜色表示深度,从而在二维平面上保留第三维信息:
fig, ax = plt.subplots(figsize=(6, 5))
sc = ax.scatter(sal, temp, c=depth, cmap="viridis_r", s=18)
ax.set_xlabel("盐度 / 1")
ax.set_ylabel("温度 / ℃")
ax.set_title("T-S 点聚图(颜色表示深度)")
fig.colorbar(sc, ax=ax, label="深度 / m")
plt.tight_layout()
plt.savefig("ts_diagram.png", dpi=150)
这里使用 cmap="viridis_r"(反转色带),使浅层为亮色、深层为暗色,符合“越深越暗”的直觉。若数据点较多,可适当减小 s 并提高透明度(alpha=0.6),避免点重叠成块。T-S 图上若出现沿某条直线分布的点列,往往提示两水团的混合;若点群明显分裂为两簇,则提示存在性质不同的水团。
五、绘图前的数据检查与常见问题
图形是否可信,取决于绘图前的检查。建议在绘图前先做三件事:其一,确认 depth、temp、sal 三者长度一致且一一对应,避免错位;其二,检查深度是否单调递增,若 CTD 下放与回收数据混在一起,需先按深度排序或只取下放段;其三,检查盐度是否存在明显离群值(如小于 0 或远高于 40),这类值会严重拉伸横轴,使曲线挤成一团。
此外,坐标轴范围应依据数据实际分布设定,而非机械使用默认值。例如近岸站盐度可能集中在 30~34,若横轴从 0 开始,曲线会被压扁;此时可用 ax.set_xlim(29, 35) 聚焦有效区间,但需在图中保留清晰的刻度与单位,避免误导读者。
六、从图形到判读
三种基础图形绘制完成后,判读应围绕具体特征展开:T-D 曲线上斜率最大的深度段对应温跃层,可读出其上下界;S-D 曲线上盐度快速变化的深度段对应盐跃层;T-S 图上点群的分布形态则用于判断水团数目与混合趋势。把三者对照,例如温跃层与盐跃层是否出现在同一深度、T-S 点群是否沿混合线分布,就能对剖面的垂向结构与水团特征形成较完整的认识。这些判读结论应建立在数据检查通过、坐标约定一致的前提之上。