You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:统一三类河口Depth profile visual的Salinity图例刻度

河口盐度深度剖面:统一刻度与全局图例实现方案

核心解决思路

  • 提取数据集Salinity字段的全局极值,确定统一的颜色刻度区间
  • 创建子图布局时共享深度轴,并为所有子图指定相同的盐度颜色映射范围
  • 仅添加一个全局颜色条作为盐度图例,避免子图重复显示

代码实现(Matplotlib版)

假设你的数据集已加载为Pandas DataFrame,命名为df:

import matplotlib.pyplot as plt
import pandas as pd

# 1. 计算全局盐度范围,微调后让刻度更美观
sal_min = round(df['Salinity'].min() - 0.5, 1)
sal_max = round(df['Salinity'].max() + 0.5, 1)

# 2. 创建子图,共享y轴(深度轴)
fig, axes = plt.subplots(1, 3, figsize=(16, 7), sharey=True)
cmap = plt.cm.viridis  # 选择颜色映射

# 3. 绘制Closed河口剖面
closed_data = df[df['State'] == 'Closed']
scatter_closed = axes[0].scatter(closed_data['Salinity'], closed_data['Depth'],
                                 c=closed_data['Salinity'], cmap=cmap,
                                 vmin=sal_min, vmax=sal_max)
axes[0].set_title('Closed Estuary')
axes[0].set_xlabel('Salinity')
axes[0].set_ylabel('Depth')
axes[0].invert_yaxis()  # 反转y轴,符合深度可视化常规(上浅下深)

# 4. 绘制Open河口剖面
open_data = df[df['State'] == 'Open']
axes[1].scatter(open_data['Salinity'], open_data['Depth'],
                c=open_data['Salinity'], cmap=cmap,
                vmin=sal_min, vmax=sal_max)
axes[1].set_title('Open Estuary')
axes[1].set_xlabel('Salinity')

# 5. 绘制Semi-closed河口剖面
semi_closed_data = df[df['State'] == 'Semi-closed']
axes[2].scatter(semi_closed_data['Salinity'], semi_closed_data['Depth'],
                c=semi_closed_data['Salinity'], cmap=cmap,
                vmin=sal_min, vmax=sal_max)
axes[2].set_title('Semi-closed Estuary')
axes[2].set_xlabel('Salinity')

# 6. 添加全局盐度图例(颜色条)
fig.colorbar(scatter_closed, ax=axes, orientation='vertical', pad=0.06, label='Salinity')

plt.tight_layout()
plt.show()

简化实现(Seaborn版)

用Seaborn的FacetGrid可以快速实现分组可视化:

import seaborn as sns

# 计算全局盐度范围
sal_min = round(df['Salinity'].min() - 0.5, 1)
sal_max = round(df['Salinity'].max() + 0.5, 1)

# 创建分面子图,共享y轴
g = sns.FacetGrid(df, col='State', col_wrap=3, sharey=True, height=6)
# 映射散点图,指定统一颜色范围
g.map(sns.scatterplot, 'Salinity', 'Depth', hue='Salinity', palette='viridis',
      vmin=sal_min, vmax=sal_max)
# 添加全局图例,反转y轴
g.add_legend(title='Salinity')
g.set(ylim=(df['Depth'].max(), df['Depth'].min()))
g.set_axis_labels('Salinity', 'Depth')

plt.tight_layout()
plt.show()

关键细节说明

  • 通过vmin和vmax强制所有子图使用相同的盐度刻度区间,保证颜色映射一致
  • sharey=True让三个子图共享深度轴刻度,提升可视化统一性
  • 反转y轴符合海洋/水文可视化的常规习惯(上方为水体表层,下方为深层)

内容的提问来源于stack exchange,提问作者Daniel Buttner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:06:24