python绘制年平均海表温度、盐度、ph分布图

python绘制年平均海表温度、盐度、ph图

文章目录

  • python绘制年平均海表温度、盐度、ph分布图
    • 前言
    • 一、数据准备
    • 二、代码编写
      • 2.1. python绘制年平均海表温度(主要)
      • 2.2. python绘制年平均海表盐度(选看)
      • 2.3. python绘制年平均海表ph(选看)
    • 总结


python绘制年平均海表温度、盐度、ph分布图

所属目录:紫菜创建时间:2025/2/18更新时间:2025/2/19URL:https://blog.csdn.net/2301_78630677/article/details/145716784

前言

本文主要使用python绘制年平均海表温度、盐度、ph分布图,所用数据来源于Bio-ORACLE
参考文章:
Python绘制海表温度
【python海洋专题十二】年平均的南海海表面温度图

所用到的中国地图shp文件:
链接:https://pan.baidu.com/s/1q9hitI11CCYDWvBTWbAevg
提取码:9ju8

一、数据准备

Bio-ORACLE官网 下载所需的 2010-2020平均海表Ocean temperature、Salinity、pH数据
点击前往下载地址
在这里插入图片描述

下载下来的环境数据为.nc文件,也就是NetCDF格式。

‌NetCDF(Network Common Data Form)格式是一种用于存储和共享科学数据的标准格式,广泛应用于气象学、海洋学、地球科学等领域‌。.nc文件是NetCDF文件的扩展名,主要用于存储大型科学和工程数据集。

.nc文件的基本结构和特点
‌自描述性‌:.nc文件包含关于数据集的元数据,这些元数据描述了数据集的结构和内容,使得用户无需其他文档即可理解数据。
‌可移植性‌:.nc文件是二进制格式,能够在不同的平台上无缝迁移和使用。
‌多维数组结构‌:.nc文件通常包含多个维度,如时间、经度和纬度,适用于存储复杂的多维数据集。

补充:
所用的Bio-ORACLE环境数据合集(有需要就下载吧)
Bio-ORACLE数据分享[decade 2010-2020] [Surface layers]

二、代码编写

接下来主要讲述 python绘制年平均海表温度的代码,另外两个类似,只需要稍加修改

2.1. python绘制年平均海表温度(主要)

该代码用于绘制中国周边海域的海表温度(SST)分布图,并添加了省份边界、等温线和网格线等细节,最后保存pdf文件

import xarray as xr  
import matplotlib.pyplot as plt  
import cartopy.crs as ccrs  
import cartopy.feature as cfeature  
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter  # 导入经纬度格式器 
import numpy as np
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
# 加载NetCDF格式的SST数据(替换为你的SST数据文件路径)  
ds = xr.open_dataset(r"D:\oceandata\Bio-ORACLE\Temperature [mean].nc")  # 假设你的SST数据在该文件中  print(ds.variables) #打印SST数据的所有变量名及其相关信息,通过查看这些信息,你可以确定要使用哪个变量进行绘图和分析# 选择SST变量(替换为你的SST变量名)  
sst = ds['thetao_mean']# 计算时间轴上的平均值(如果时间是一个维度)  
sst_mean = sst.mean(dim='time')  # 假设'time'是时间维度  # 创建一个地图并设置投影  
fig = plt.figure(figsize=(10, 5))  
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())  # 添加陆地和海洋特征  
ax.add_feature(cfeature.LAND, color='lightgray')  
ax.add_feature(cfeature.OCEAN, color='w', edgecolor='lightgray')  
ax.coastlines(color='black')  
# 添加省份边界
shapefile = r"C:\Users\www\Desktop\china_map\china_SHP\省界_Project.shp"  # 替换为你的Shapefile文件路径
china_provinces = ShapelyFeature(Reader(shapefile).geometries(), ccrs.PlateCarree(), edgecolor='black', facecolor='none')
ax.add_feature(china_provinces)# 绘制SST平均值数据  
sst_plot = sst_mean.plot.contourf(ax=ax, transform=ccrs.PlateCarree(), cmap='coolwarm', levels=25, extend='both', add_colorbar=False,vmin=5, vmax=30)  
# levels参数可以调整等值线的数量  (具体来说,levels=25 表示将数据范围分成25个间隔,并绘制出相应的等值线。这些等值线将数据集的值范围(在此例中是5到30°C)平均分成25个部分,每个部分的上限和下限定义了一条等值线。)# 添加颜色条  
cbar = fig.colorbar(sst_plot, drawedges=True, ax=ax, location='right', shrink=0.95, pad=0.08, spacing='uniform', label='Average Sea Surface Temperature (°C)')  
cbar.ax.tick_params(labelsize=10)  # 设置色标尺标签大小 # 设置颜色条的刻度标签
cbar.set_ticks(np.arange(5, 31, 5))# 添加等温线  
sst_contour = sst_mean.plot.contour(ax=ax, transform=ccrs.PlateCarree(), colors='gray', levels=130,linewidths=0.5)   # levels参数可以调整等温线的数量  # 为等值线添加标签  
plt.clabel(sst_contour, inline=True, fontsize=10, fmt='%1.1f') # 设置地图的经纬度范围(可选)  
ax.set_extent([110, 135, 20, 40], crs=ccrs.PlateCarree())  # 添加网格线  
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, xlocs=np.arange(110, 135, 5), ylocs=np.arange(20, 40, 5),linewidth=0.5, linestyle='--', color='k', alpha=0.8)  # 添加网格线
gl.xlabels_top = False  
gl.ylabels_right = False  
gl.xformatter = LongitudeFormatter()  # 使用默认的经度格式器  
gl.yformatter = LatitudeFormatter()   # 使用默认的纬度格式器  
gl.xlabel_style = {'size': 10, 'color': 'black'}  
gl.ylabel_style = {'size': 10, 'color': 'black'}  
print("Map created successfully!")
# 保存地图为PDF文件
plt.savefig('scs_sst_1.pdf', dpi=600, bbox_inches='tight', pad_inches=0.1)
# 显示地图  
plt.show()

代码大概包括以下流程:

  1. 加载数据:读取 NetCDF 文件并提取 SST 变量。
  2. 数据处理:对时间维度取平均。
  3. 创建地图:设置投影、添加陆地和海洋特征、绘制省份边界。
  4. 绘制 SST 数据:绘制填充等温线和等温线,添加颜色条和标签。
  5. 设置地图范围与网格线:调整地图范围,添加网格线并格式化标签。
  6. 保存与显示:保存地图为 PDF 文件并显示。

print(ds.variables) #打印SST数据的所有变量名及其相关信息,通过查看这些信息,你可以确定要使用哪个变量进行绘图和分析
例如该SST数据包括四个变量:time、latitude、longitude、thetao_mean, 其中thetao_mean就是SST变量名。

在这里插入图片描述

结果显示
在这里插入图片描述

2.2. python绘制年平均海表盐度(选看)

以下代码与年平均海表温度的代码类似(一些注释信息就没改过来了,知道意思即可)


import xarray as xr  
import matplotlib.pyplot as plt  
import cartopy.crs as ccrs  
import cartopy.feature as cfeature  
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter  # 导入经纬度格式器 
import numpy as np
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
# 加载NetCDF格式的SST数据(替换为你的数据文件路径)  ds = xr.open_dataset(r"D:\oceandata\so_baseline_2000_2019_depthsurf_49ed_5fc4_602c_U1739344920620_yandu.nc")  # 假设你的SST数据在该文件中  print(ds.variables)
# 选择SST变量(替换为你的SST变量名)  
sst = ds['so_mean']# 计算时间轴上的平均值(如果时间是一个维度)  
sst_mean = sst.mean(dim='time')  # 假设'time'是时间维度  # 创建一个地图并设置投影  
fig = plt.figure(figsize=(10, 5))  
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())  # 添加陆地和海洋特征  
ax.add_feature(cfeature.LAND, color='lightgray')  
ax.add_feature(cfeature.OCEAN, color='w', edgecolor='lightgray')  
ax.coastlines(color='black')  
# 添加省份边界
shapefile = r"C:\Users\www\Desktop\a5bc0-main\china_SHP\省界_Project.shp"  # 替换为你的Shapefile文件路径
china_provinces = ShapelyFeature(Reader(shapefile).geometries(), ccrs.PlateCarree(), edgecolor='black', facecolor='none')
ax.add_feature(china_provinces)# 绘制SST平均值数据  
sst_plot = sst_mean.plot.contourf(ax=ax, transform=ccrs.PlateCarree(), cmap='coolwarm', levels=15, extend='both', add_colorbar=False,vmin=20, vmax=35)  # levels参数可以调整等温线的数量  # 添加颜色条  
cbar = fig.colorbar(sst_plot, drawedges=True, ax=ax, location='right', shrink=0.95, pad=0.08, spacing='uniform', label='Average Sea Surface Salinity (psu)')  
cbar.ax.tick_params(labelsize=10)  # 设置色标尺标签大小 # 设置颜色条的刻度标签
cbar.set_ticks(np.arange(20, 36, 3))# 添加等温线  
sst_contour = sst_mean.plot.contour(ax=ax, transform=ccrs.PlateCarree(), colors='gray', levels=50,linewidths=0.5)  # 为等值线添加标签  
plt.clabel(sst_contour, inline=True, fontsize=10, fmt='%1.1f') # 设置地图的经纬度范围(可选)  
ax.set_extent([110, 135, 20, 40], crs=ccrs.PlateCarree())  # 添加网格线  
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, xlocs=np.arange(110, 135, 5), ylocs=np.arange(20, 40, 5),linewidth=0.5, linestyle='--', color='k', alpha=0.8)  # 添加网格线
gl.xlabels_top = False  
gl.ylabels_right = False  
gl.xformatter = LongitudeFormatter()  # 使用默认的经度格式器  
gl.yformatter = LatitudeFormatter()   # 使用默认的纬度格式器  
gl.xlabel_style = {'size': 10, 'color': 'black'}  
gl.ylabel_style = {'size': 10, 'color': 'black'}  
print("Map created successfully!")# 保存地图为PDF文件
plt.savefig('scs_yandu_1.pdf', dpi=600, bbox_inches='tight', pad_inches=0.1)
# 显示地图  
plt.show()

在这里插入图片描述

2.3. python绘制年平均海表ph(选看)

以下代码与年平均海表温度的代码类似,只不过因为ph的值较小,我们可以先计算一下数据中的最大值与最小值,方便确定ph大小


import xarray as xr  
import matplotlib.pyplot as plt  
import cartopy.crs as ccrs  
import cartopy.feature as cfeature  
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter  # 导入经纬度格式器 
import numpy as np
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
# 加载NetCDF格式的SST数据(替换为你的SST数据文件路径)  ds = xr.open_dataset(r"D:\oceandata\ph_baseline_2000_2018_depthsurf_f606_6dc8_6180_U1739344995788_ph.nc")  # 假设你的SST数据在'sst.nc'文件中  # 选择pH变量(替换为你的pH变量名)  
ph = ds['ph_mean']# 计算pH数据的最高和最低值
ph_max = ph.max(dim=['time', 'latitude', 'longitude'])
ph_min = ph.min(dim=['time', 'latitude', 'longitude'])print("Maximum pH value:", ph_max)
print("Minimum pH value:", ph_min)print(ds.variables)
# 选择SST变量(替换为你的SST变量名)  
sst = ds['ph_mean']# 计算时间轴上的平均值(如果时间是一个维度)  
sst_mean = sst.mean(dim='time')  # 假设'time'是时间维度  # 创建一个地图并设置投影  
fig = plt.figure(figsize=(10, 5))  
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())  # 添加陆地和海洋特征  
ax.add_feature(cfeature.LAND, color='lightgray')  
ax.add_feature(cfeature.OCEAN, color='w', edgecolor='lightgray')  
ax.coastlines(color='black')  
# 添加省份边界
shapefile = r"C:\Users\王浩天\Desktop\a5bc0-main\china_SHP\省界_Project.shp"  # 替换为你的Shapefile文件路径
china_provinces = ShapelyFeature(Reader(shapefile).geometries(), ccrs.PlateCarree(), edgecolor='black', facecolor='none')
ax.add_feature(china_provinces)# 绘制SST平均值数据  
sst_plot = sst_mean.plot.contourf(ax=ax, transform=ccrs.PlateCarree(), cmap='coolwarm', levels=15, extend='both', add_colorbar=False,vmin=8, vmax=8.2)  # levels参数可以调整等温线的数量  # 添加颜色条  
cbar = fig.colorbar(sst_plot, drawedges=True, ax=ax, location='right', shrink=0.95, pad=0.08, spacing='uniform', label='Average Sea Surface pH')  
cbar.ax.tick_params(labelsize=10)  # 设置色标尺标签大小 # 设置颜色条的刻度标签
cbar.set_ticks(np.arange(8, 8.25, 0.05))# 添加等温线  
sst_contour = sst_mean.plot.contour(ax=ax, transform=ccrs.PlateCarree(), colors='gray', levels=200,linewidths=0.5)  # 为等值线添加标签  
plt.clabel(sst_contour, inline=True, fontsize=10, fmt='%1.3f')  #保留小数点后三位# 设置地图的经纬度范围(可选)  
ax.set_extent([110, 135, 20, 40], crs=ccrs.PlateCarree())  # 添加网格线  
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, xlocs=np.arange(110, 135, 5), ylocs=np.arange(20, 40, 5),linewidth=0.5, linestyle='--', color='k', alpha=0.8)  # 添加网格线
gl.xlabels_top = False  
gl.ylabels_right = False  
gl.xformatter = LongitudeFormatter()  # 使用默认的经度格式器  
gl.yformatter = LatitudeFormatter()   # 使用默认的纬度格式器  
gl.xlabel_style = {'size': 10, 'color': 'black'}  
gl.ylabel_style = {'size': 10, 'color': 'black'}  
print("Map created successfully!")
# 保存地图为PDF文件
plt.savefig('scs_ph_1.pdf', dpi=600, bbox_inches='tight', pad_inches=0.1)
# 显示地图  
plt.show()

在这里插入图片描述

总结

主要是以绘制年平均海表温度分布图为例,其余环境数据也类似。

2025/2/19

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21612.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于海思soc的智能产品开发(图像处理的几种需求)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于一个嵌入式设备来说,如果上面有一个camera,那么就可以有很多的用途。简单的用途就是拍照,比拍照更多一点的…

使用linux脚本部署discuz博客(详细注释版)

使用脚本部署一个discuzz项目 1.显示当前环境状态 防火墙状态 selinux状态 httpd状态 由上可知,虚拟机已处于最初始状态 2.脚本编写 #!/bin/bash #这是一个通过脚本来部署discuzz博客 firewalld关闭 systemctl stop firewalld if [ $? -eq 0 ];then echo "…

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择: CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集,用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目,旨在提供类Uni…

React创建项目实用教程

✍请将整篇文章阅读完再开始使用create-react-app react-project创建项目 检查node版本 node -v // node版本:v22.10.0使用nvm降版本修改到了node V20.11.1之后再进行一系列操作的 react脚手架安装: npm install -g create-react-app// node版本&…

RK3588配置成为路由器

文章目录 前言一、配置netplan二、安装hostapd1.创建hostapd.conf文件2.安装软件3.修改启动文件4.修改/etc/default/hostapd 文件 三、安装dnsmasq服务四、配置NET及重启验证五、常见问题总结 前言 RK3588开发板有两个网口,一个无线网卡。我需要配置为家用路由器模…

游戏引擎学习第114天

打开内容并回顾 目前正在讨论一个非常重要的话题——优化。当代码运行太慢,无法达到所需性能时,我们该怎么办。昨天,我们通过在代码中添加性能计数器,验证了一些性能分析的数据,这些计数器帮助我们了解每个操作需要的…

如何修改Windows系统Ollama模型存储位置

默认情况下,Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中,这会占用大量 C 盘空间,增加C盘“爆红”的几率。所以,我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…

第1章大型互联网公司的基础架构——1.2 客户端连接机房的技术1:DNS

客户端启动时要做的第一件事情就是通过互联网与机房建立连接,然后用户才可以在客户端与后台服务器进行网络通信。目前在计算机网络中应用较为广泛的网络通信协议是TCP/IP,它的通信基础是IP地址,因为IP地址有如下两个主要功能。 标识设备&…

第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)

重要信息 大会官网:www.icispp.com 大会时间:2025年3月28日-30日 大会地点:南京 简介 由河海大学和江苏大学联合主办的第四届图像、信号处理与模式识别(ISPP 2025) 将于2025年3月28日-30日在中国南京举行。主要围绕图像信号处…

STM32F1学习——BKP备份寄存器和RTC实时时钟

一、RTC实时时钟 在使用RTC实时时钟时,我们需要理解一下Unix时间戳相关的内容。Unix定义为从UTC/GMT的1970年1月1日的0时0分0秒开始所经过的秒数,不考虑润秒。 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量,世界上所…

【Python爬虫(26)】Python爬虫进阶:数据清洗与预处理的魔法秘籍

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

Java集合框架之List接口详解

目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…

嵌入式八股文(四)计算机网络篇

第一章 基础概念 1. 服务 指网络中各层为紧邻的上层提供的功能调用,是垂直的。包括面向连接服务、无连接服务、可靠服务、不可靠服务。 2. 协议 是计算机⽹络相互通信的对等层实体之间交换信息时必须遵守的规则或约定的集合。⽹络协议的三个基本要素:语法、…

SpringBoot+Vue+Mysql苍穹外卖

一.项目介绍 1.项目内容 苍穹外卖是一款为大学学子设计的校园外卖服务软件,旨在提供便捷的食堂外卖送至宿舍的服务。该软件包含系统管理后台和用户端(微信小程序)两部分,支持在线浏览菜品、添加购物车、下单等功能,并…

【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)

文章目录 第四章 创建型模式4.2 工厂方法模式4.2.1 需求: 模拟发放奖品业务4.2.2 原始开发方式4.2.3 简单工厂模式4.2.3.1 简单工厂模式介绍4.2.3.2 简单工厂原理4.2.3.3 简单工厂模式重构代码4.2.3.4 简单工厂模式总结 4.2.4 工厂方法模式4.2.4.1 工厂方法模式介绍4.2.4.2 工厂…

【C语言】指针(5)

前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…

SpringBoot:SSL证书部署+SpringBoot实现HTTPS安全访问

一、前言 SSL协议介于TCP/IP协议栈的第四层(传输层)和第七层(应用层)之间,为基于TCP的应用层协议(如HTTP)提供安全连接。它通过在客户端和服务器之间建立一个加密的通道,确保数据在传…

嵌入式 lwip http server makefsdata

背景: 基于君正X2000 MCU Freertoslwip架构 实现HTTP server服务,MCU作为HTTP服务器通过网口进行数据包的传输,提供网页服务。其中设计到LWIP提供的工具makefsdata,常用于将文件或目录结构转换为适合嵌入到固件中的二进制格式。 …

论文笔记-WSDM2025-ColdLLM

论文笔记-WSDM2025-Large Language Model Simulator for Cold-Start Recommendation ColdLLM:用于冷启动推荐的大语言模型模拟器摘要1.引言2.前言3.方法3.1整体框架3.1.1行为模拟3.1.2嵌入优化 3.2耦合漏斗ColdLLM3.2.1过滤模拟3.2.2精炼模拟 3.3模拟器训练3.3.1LLM…

《DeepSeek-V3:人工智能大语言模型》

《DeepSeek-V3:人工智能大语言模型》 1. 引言 我们介绍了 DeepSeek-V3,这是一个强大的专家混合 (MoE) 语言模型,总共有 671B 个参数,每个令牌激活了 37B。 为了实现高效的推理和具有成本效益的训练,DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 DeepSeekMoE 架构,这些…