网站总体设计方案,网站管理系统排行榜,买域名建网站,沙坪坝网站建设python绘制年平均海表温度、盐度、ph图 文章目录 python绘制年平均海表温度、盐度、ph分布图前言一、数据准备二、代码编写2.1. python绘制年平均海表温度#xff08;主要#xff09;2.2. python绘制年平均海表盐度#xff08;选看#xff09;2.3. python绘制年平均海表ph主要2.2. python绘制年平均海表盐度选看2.3. python绘制年平均海表ph选看 总结 python绘制年平均海表温度、盐度、ph分布图
所属目录紫菜创建时间2025/2/18更新时间2025/2/19URLhttps://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格式。 NetCDFNetwork 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(rD:\oceandata\Bio-ORACLE\Temperature [mean].nc) # 假设你的SST数据在该文件中 print(ds.variables) #打印SST数据的所有变量名及其相关信息通过查看这些信息你可以确定要使用哪个变量进行绘图和分析# 选择SST变量替换为你的SST变量名
sst ds[thetao_mean]# 计算时间轴上的平均值如果时间是一个维度
sst_mean sst.mean(dimtime) # 假设time是时间维度 # 创建一个地图并设置投影
fig plt.figure(figsize(10, 5))
ax fig.add_subplot(1, 1, 1, projectionccrs.PlateCarree()) # 添加陆地和海洋特征
ax.add_feature(cfeature.LAND, colorlightgray)
ax.add_feature(cfeature.OCEAN, colorw, edgecolorlightgray)
ax.coastlines(colorblack)
# 添加省份边界
shapefile rC:\Users\www\Desktop\china_map\china_SHP\省界_Project.shp # 替换为你的Shapefile文件路径
china_provinces ShapelyFeature(Reader(shapefile).geometries(), ccrs.PlateCarree(), edgecolorblack, facecolornone)
ax.add_feature(china_provinces)# 绘制SST平均值数据
sst_plot sst_mean.plot.contourf(axax, transformccrs.PlateCarree(), cmapcoolwarm, levels25, extendboth, add_colorbarFalse,vmin5, vmax30)
# levels参数可以调整等值线的数量 具体来说levels25 表示将数据范围分成25个间隔并绘制出相应的等值线。这些等值线将数据集的值范围在此例中是5到30°C平均分成25个部分每个部分的上限和下限定义了一条等值线。# 添加颜色条
cbar fig.colorbar(sst_plot, drawedgesTrue, axax, locationright, shrink0.95, pad0.08, spacinguniform, labelAverage Sea Surface Temperature (°C))
cbar.ax.tick_params(labelsize10) # 设置色标尺标签大小 # 设置颜色条的刻度标签
cbar.set_ticks(np.arange(5, 31, 5))# 添加等温线
sst_contour sst_mean.plot.contour(axax, transformccrs.PlateCarree(), colorsgray, levels130,linewidths0.5) # levels参数可以调整等温线的数量 # 为等值线添加标签
plt.clabel(sst_contour, inlineTrue, fontsize10, fmt%1.1f) # 设置地图的经纬度范围可选
ax.set_extent([110, 135, 20, 40], crsccrs.PlateCarree()) # 添加网格线
gl ax.gridlines(crsccrs.PlateCarree(), draw_labelsTrue, xlocsnp.arange(110, 135, 5), ylocsnp.arange(20, 40, 5),linewidth0.5, linestyle--, colork, alpha0.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, dpi600, bbox_inchestight, pad_inches0.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(rD:\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(dimtime) # 假设time是时间维度 # 创建一个地图并设置投影
fig plt.figure(figsize(10, 5))
ax fig.add_subplot(1, 1, 1, projectionccrs.PlateCarree()) # 添加陆地和海洋特征
ax.add_feature(cfeature.LAND, colorlightgray)
ax.add_feature(cfeature.OCEAN, colorw, edgecolorlightgray)
ax.coastlines(colorblack)
# 添加省份边界
shapefile rC:\Users\www\Desktop\a5bc0-main\china_SHP\省界_Project.shp # 替换为你的Shapefile文件路径
china_provinces ShapelyFeature(Reader(shapefile).geometries(), ccrs.PlateCarree(), edgecolorblack, facecolornone)
ax.add_feature(china_provinces)# 绘制SST平均值数据
sst_plot sst_mean.plot.contourf(axax, transformccrs.PlateCarree(), cmapcoolwarm, levels15, extendboth, add_colorbarFalse,vmin20, vmax35) # levels参数可以调整等温线的数量 # 添加颜色条
cbar fig.colorbar(sst_plot, drawedgesTrue, axax, locationright, shrink0.95, pad0.08, spacinguniform, labelAverage Sea Surface Salinity (psu))
cbar.ax.tick_params(labelsize10) # 设置色标尺标签大小 # 设置颜色条的刻度标签
cbar.set_ticks(np.arange(20, 36, 3))# 添加等温线
sst_contour sst_mean.plot.contour(axax, transformccrs.PlateCarree(), colorsgray, levels50,linewidths0.5) # 为等值线添加标签
plt.clabel(sst_contour, inlineTrue, fontsize10, fmt%1.1f) # 设置地图的经纬度范围可选
ax.set_extent([110, 135, 20, 40], crsccrs.PlateCarree()) # 添加网格线
gl ax.gridlines(crsccrs.PlateCarree(), draw_labelsTrue, xlocsnp.arange(110, 135, 5), ylocsnp.arange(20, 40, 5),linewidth0.5, linestyle--, colork, alpha0.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, dpi600, bbox_inchestight, pad_inches0.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(rD:\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(dimtime) # 假设time是时间维度 # 创建一个地图并设置投影
fig plt.figure(figsize(10, 5))
ax fig.add_subplot(1, 1, 1, projectionccrs.PlateCarree()) # 添加陆地和海洋特征
ax.add_feature(cfeature.LAND, colorlightgray)
ax.add_feature(cfeature.OCEAN, colorw, edgecolorlightgray)
ax.coastlines(colorblack)
# 添加省份边界
shapefile rC:\Users\王浩天\Desktop\a5bc0-main\china_SHP\省界_Project.shp # 替换为你的Shapefile文件路径
china_provinces ShapelyFeature(Reader(shapefile).geometries(), ccrs.PlateCarree(), edgecolorblack, facecolornone)
ax.add_feature(china_provinces)# 绘制SST平均值数据
sst_plot sst_mean.plot.contourf(axax, transformccrs.PlateCarree(), cmapcoolwarm, levels15, extendboth, add_colorbarFalse,vmin8, vmax8.2) # levels参数可以调整等温线的数量 # 添加颜色条
cbar fig.colorbar(sst_plot, drawedgesTrue, axax, locationright, shrink0.95, pad0.08, spacinguniform, labelAverage Sea Surface pH)
cbar.ax.tick_params(labelsize10) # 设置色标尺标签大小 # 设置颜色条的刻度标签
cbar.set_ticks(np.arange(8, 8.25, 0.05))# 添加等温线
sst_contour sst_mean.plot.contour(axax, transformccrs.PlateCarree(), colorsgray, levels200,linewidths0.5) # 为等值线添加标签
plt.clabel(sst_contour, inlineTrue, fontsize10, fmt%1.3f) #保留小数点后三位# 设置地图的经纬度范围可选
ax.set_extent([110, 135, 20, 40], crsccrs.PlateCarree()) # 添加网格线
gl ax.gridlines(crsccrs.PlateCarree(), draw_labelsTrue, xlocsnp.arange(110, 135, 5), ylocsnp.arange(20, 40, 5),linewidth0.5, linestyle--, colork, alpha0.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, dpi600, bbox_inchestight, pad_inches0.1)
# 显示地图
plt.show() 总结
主要是以绘制年平均海表温度分布图为例其余环境数据也类似。
2025/2/19