python处理mat格式数据

运用python导入mat格式海温数据并可视化

##%
#导入库
import scipy.io
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import warnings
warnings.filterwarnings("ignore")
##%
#------------数据查看
df=scipy.io.loadmat("E:\python visualize\T.mat")#更改路径
# print(df.keys())#查看内在变量
tem,depth,lat,lon=np.array(df['T']),np.array(df['depth']).squeeze(),\
                  np.array(df['lat']).squeeze(),np.array(df['lon']).squeeze()
# print(len(depth),len(lat),len(lon))#查看数组大小
# print(tem.shape)
##%
#----------数据处理
tem_array = xr.DataArray(tem,coords={'depth': depth,'lat': lat,'lon': lon},
dims=['depth', 'lat', 'lon'])
#tem_array(depth,lat,lon)
# print(tem_array)
#----------检查异常值
if tem_array.any()>=100 or tem_array.any()<=-100:
    print('有异常值')
elif np.isnan(tem_array).any():
    print('有nan值')
##%
#-----绘图数据准备
#----1.100°E-160°E,10°N-30°N海表面温度
sst=tem_array.sel(lat=slice(9.5,30.5),lon=slice(99.5,160.5),depth=5)
# print(sst.shape)
#----2.上层2500米内温度分布的纬向平均
lat_mean_t=np.mean(tem_array.sel(lat=slice(17,19),lon=slice(122,128),depth=slice(5,2500)),axis=1)
# print(lat_mean_t.shape)
#----3.平均垂向分布
dp=tem_array.sel(lat=slice(17,19),lon=slice(122,128))
dp_mean=np.mean(dp,axis=(1,2))
# print(dp_mean)
##%
#----绘图
fig = plt.figure(figsize=(8, 5))
gs = GridSpec(2, 2, height_ratios=[2, 1])
fig.suptitle('Sea Temperature $^o$C')
# 第一个子图
ax1 = fig.add_subplot(gs[0, :])
# 可导入cartopy库添加地理信息要素
# ax1.add_feature(cfeature.COASTLINE.with_scale("110m"), linewidth=1.2, facecolor='lightgray')
contour1 = ax1.contourf(sst.lon, sst.lat, sst, 50,cmap='jet')
ax1.set_xticks(np.arange(100,161,10))
ax1.set_yticks(np.arange(10,30.1,2.5))
cont=ax1.contour(sst.lon, sst.lat, sst,levels=[25.0],c='brown')
ax1.clabel(cont, fmt="%2.1f", colors="k")
plt.colorbar(contour1, ax=ax1, orientation='vertical')
# 黄色方框
ax1.plot([122, 128], [19, 19], color='yellow')
ax1.plot([122, 128], [17, 17], color='yellow')
ax1.plot([122, 122], [17, 19], color='yellow')
ax1.plot([128, 128], [17, 19], color='yellow')
# 第二个子图
ax2 = fig.add_subplot(gs[1, 0])
contour2 = ax2.contourf(lat_mean_t.lon, -lat_mean_t.depth, lat_mean_t, 25,cmap='jet')
ax2.set_yticks(np.arange(0,-2501,-500))
plt.colorbar(contour2, ax=ax2, orientation='vertical')
# 第三个子图
ax3 = fig.add_subplot(gs[1, 1])
ax3.plot(np.array(dp_mean),-dp_mean.depth)
ax3.set_yticks(np.arange(0,-6001,-1000))#设置y轴
ax3.grid(alpha=0.5,lw=0.2)
plt.tight_layout()#调整布局
plt.show()

结果如下:

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用SciPy和NumPy库来处理.mat数据mat文件格式MATLAB程序的默认文件格式,包含图像、数值、结构体和数组等数据类型。 首先,需要安装SciPy和NumPy库。可以通过pip命令进行安装。例如,在控制台输入以下命令: pip install scipy pip install numpy 导入SciPy和NumPy库: import scipy.io import numpy as np 在Python中读取.mat文件,可以使用SciPy库的loadmat函数。例如,读取名为‘data.mat’的文件: data = scipy.io.loadmat('data.mat') loadmat函数返回一个Python字典,包含MATLAB文件中的所有变量和它们的值。可以通过键值对访问Python字典中的值。例如,访问名为‘X’的变量: X = data['X'] 读取MATLAB中的结构体,需要用到NumPy库中的特殊功能函数numpy.array。例如,读取名称为‘results.mat’且含有名为‘example’的结构体: results = scipy.io.loadmat('results.mat') example_struct = results['example'] 将example结构体转换为numpy数组,每个成员变量都是一个字段: example_arr = np.array([example_struct[field] for field in example_struct.dtype.names]) 读取MATLAB矩阵时,需要注意数据类型和维度。有些数据类型(如字符串)不能直接转换为NumPy数组。对于矩阵类型的数据,需要考虑行向量/列向量的转置问题。可以使用numpy.transpose函数在Python中进行转置,例如: B = np.transpose(A) 如果想将NumPy数组写回.mat文件中,可以使用SciPy库的savemat函数。例如,将数组写为名为‘data_out.mat’的文件: scipy.io.savemat('data_out.mat', {'X': X})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值