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()
代码大概包括以下流程:
- 加载数据:读取 NetCDF 文件并提取 SST 变量。
- 数据处理:对时间维度取平均。
- 创建地图:设置投影、添加陆地和海洋特征、绘制省份边界。
- 绘制 SST 数据:绘制填充等温线和等温线,添加颜色条和标签。
- 设置地图范围与网格线:调整地图范围,添加网格线并格式化标签。
- 保存与显示:保存地图为 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
相关文章:
python绘制年平均海表温度、盐度、ph分布图
python绘制年平均海表温度、盐度、ph图 文章目录 python绘制年平均海表温度、盐度、ph分布图前言一、数据准备二、代码编写2.1. python绘制年平均海表温度(主要)2.2. python绘制年平均海表盐度(选看)2.3. python绘制年平均海表ph&…...
网络空间安全(2)应用程序安全
前言 应用程序安全(Application Security,简称AppSec)是一个综合性的概念,它涵盖了应用程序从开发到部署,再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义:应用程序安全是指识别和修复应用程序…...
HTTPS 通信流程
HTTPS 通信流程时序图: #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…...
全链路优化:如何让单点登录认证接口并发性能翻倍?
背景 最近针对一个单点登录认证项目进行性能优化,在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次,性能提升一倍,整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下,Ngi…...
http代理IP怎么实现?如何解决代理IP访问不了问题?
HTTP代理是一种网络服务,它充当客户端和目标服务器之间的中介。当客户端发送请求时,请求首先发送到代理服务器,然后由代理服务器转发到目标服务器。同样,目标服务器的响应也会先发送到代理服务器,再由代理服务器返回给…...
设计模式教程:迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)是设计模式中的一种行为型模式,它允许顺序访问一个集合对象中的元素,而无需暴露集合对象的内部结构。换句话说,迭代器模式提供了一个方法,能让你遍历集合中的元素,…...
AI Agent架构深度解析:从ReAct到AutoGPT,自主智能体的技术演进与工程实践
前言 觉得不错就点个赞吧!。 一、AI Agent技术架构演进图谱 (配图:AI Agent架构演进时间轴,标注关键技术节点) 1.1 三代架构对比分析 架构类型代表系统核心特征局限性反应式DeepBlue预置规则库无长期记忆认知式Wats…...
USC安防平台之地图临近资源列表
USC安防平台通过配置多层地图,并把相关的摄像机和门禁对象配置到数据上,用户可以方便的在地图上查看并操作。 但是对于大型的视频监控项目,同一个经纬度可能安装了很多台摄像机,这时候就需要显示同一个经纬度的临近资源列表&…...
Flutter 启动优化
Dart VM在Flutter中的作用是什么?它负责执行Dart代码,无论是JIT还是AOT模式都需要它。在JIT模式下,VM随应用一起运行,而在AOT模式下,代码已经被编译成机器码,VM可能不需要运行时存在?不过实际上…...
JavaScript数组方法reduce详解
JavaScript数组方法reduce详解 目录 JavaScript数组方法reduce详解一,前言二,核心语法三,案例1.求和2.找最大值3.数组转对象4.复合操作(同时实现 map filter) 四,常见错误1.空数组没有初始值2.没有返回累加…...
计算机毕业设计SpringBoot+Vue.js服装商城 服装购物系统(源码+LW文档+PPT+讲解+开题报告)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Web自动化中Selenium下Chrome与Edge的Webdriver常用Options参数
目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …...
现代未来派品牌海报徽标设计无衬线英文字体安装包 THANKS LAB
THANK LAB 是一种高级未来主义的软字体,将时尚的现代设计与光滑圆润的边缘相结合,营造出大胆而平易近人的美感。这款字体非常适合品牌、海报、标题、UI/UX 和科幻主题项目,旨在激发创造力。THANK LAB Futuristic Soft Font 完全支持拉丁字母、…...
《AI与NLP:开启元宇宙社交互动新纪元》
在科技飞速发展的当下,元宇宙正从概念逐步走向现实,成为人们关注的焦点。而在元宇宙诸多令人瞩目的特性中,社交互动体验是其核心魅力之一。人工智能(AI)与自然语言处理(NLP)技术的迅猛发展&…...
【算法通关村 Day6】二叉树层次遍历
树与层次遍历青铜挑战 理解树的结构 通过中序和后序遍历序列恢复二叉树是一个经典的二叉树构建问题。给定二叉树的中序遍历序列和后序遍历序列,我们可以利用以下步骤进行恢复。 思路: 后序遍历的特点: 后序遍历的最后一个节点是树的根节点…...
安全面试2
文章目录 简单描述一下什么是水平越权,什么是垂直越权,我要发现这两类漏洞,那我代码审计要注意什么地方水平越权:垂直越权:水平越权漏洞的审计重点垂直越权漏洞的审计重点 解释一下ssrf漏洞原理攻击场景修复方法 横向移…...
【JavaScript进阶】构造函数数据常用函数
目录 本章节用到的所有素材都可以找到:素材自取~~~~ 1、深入对象 1.1创建对象三种方式 1.2 构造函数 练习 利用构造函数创建多个对象 实例化执行过程 1.3实例成员&静态成员 2. 内置构造函数 2.1 Object 2.2 Array 练习 员工涨薪计算成本 2.3 St…...
在PiscTrace开发者版上直接处理图像色阶分布
在图像处理和计算机视觉中,色阶分布(或称灰度分布)是描述图像中像素强度分布的一个重要概念。它对于理解图像的亮度、对比度、纹理和细节等方面具有关键作用。通过色阶分布的分析,我们能够获得图像的整体信息,从而帮助…...
趣味数学300题1981版-十五个正方形
分析:移动两根变成11个正方形很简单: 移动4根变成15个正方形,分析: 一个田字格包含5个正方形,若要15个正方形需要3个田字格,如果3个田字格完全不重合,需要6*318根火柴。如果合并正方形的边&…...
Selenium实战案例1:论文pdf自动下载
在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…...
前端面试-JavaScript 数据类型检测全解
目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测(兼容旧浏览器) 五、常见面试陷阱 六、最佳实践指南 七、扩…...
nginx 反向代理 配置请求路由
nginx | 反向代理 | 配置请求路由 nginx简介 Nginx(发音为“Engine-X”)是一款高性能、开源的 Web 服务器和反向代理服务器,同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔西索夫(Igor Sysoev)于 2004…...
用户中心项目教程(十)---注册里面的重定向排查和相关的修改
文章目录 1.注册逻辑的设计和实现2.解决自带的这个重定向的问题3.增加属性的相关操作4.关于如何修改页面上面的绿色按钮 1.注册逻辑的设计和实现 上次说到了的是登录功能,我们使用数据库里面存在的这个存在的账户和密码进行登录,但是是无法进行跳转的&a…...
根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目
0.研究背景 在实际的开发中可能会遇到这样的问题,老板让你把音频中的每个讲话人的声音分离成不同的音频片段。你可以使用au等专业的音频处理软件手动分离。但是这样效率太慢了,现在ai这么发达,我们能否借助ai之力来分离一条音频中的不同的说…...
【单片机】【UDS】 (单帧与多帧) 数据传输
对于使用 CAN 的诊断通信系统,每个单帧 (SF)、 第一帧 (FF)、 连续帧 (CF) 或流控 制帧 (FC) 有 8 字节数据场;其中单帧的 CAN_DL≤8 且第一帧的 FF_DL≤4095;下表 中已定义 每个报文的类型。 CAN FD 帧的数据场支持最大 64 个字节࿰…...
WebXR教学 02 配置开发环境
默认操作系统为Windows 1.VS Code VS Code 是一款轻量级、功能强大的代码编辑器,适用于多种编程语言。 下载 步骤 1:访问 VS Code 官方网站 打开浏览器(如 Chrome、Edge 等)。 在地址栏输入以下网址: https://code.v…...
MySql数据库运维学习笔记
数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL(结构化查询语言)中的四个重要类别,它们分别用于不同类型的数据库操作,下面为你简单明了地解释这四类语句: 1. DQL(数据查询语言,Data Query Langu…...
网络协议相关问题
1. HTTP 与 HTTPS 的区别 HTTP:明文传输,端口80,无加密,易被窃听或篡改。HTTPS:SSL/TLS加密传输,端口443,通过数字证书验证身份,防止中间人攻击。 混合加密:非对称加密交…...
宇树科技13家核心零部件供应商梳理!
2025年2月6日,摩根士丹利(Morgan Stanley)发布最新人形机器人研报:Humanoid 100: Mapping the Humanoid Robot Value Chain(人形机器人100:全球人形机器人产业链梳理)。 Humanoid 100清单清单中…...
Windows 启动 SSH 服务报错 1067
Windows 启动 SSH 服务报错 1067 一、原本安装的 Windows 自带的 SSH 服务 按 Windows 键 -> 设置 -> 系统 -> 可选功能 在 添加的功能 查看是否安装了 OpenSSH 服务 一开始 执行 net start sshd 是可以正常启动的 并且其他机器也可以通过 ssh 访问 这个电脑 但是有…...


