如何在MatLab中利用netcdf数据绘制等高线

tktrz96b  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(197)

我已经使用NetCDF数据在Python中创建了一个等高线图。我绘制的是x方向上的速度,形状为(1,124,128,128),其中维度为(time,z,y,x)。我迷路的地方是让我的情节在MatLab中工作。在Python中工作的代码是,

import netCDF4 as NC
from netCDF4 import Dataset as NetCDFFile 
import matplotlib.pyplot as plt
import numpy as np

nc = NetCDFFile('XYZ_time_1.nc')
u = nc.variables["u"][:,:,:,:] # Velcity in x direction, size(1, 124, 128, 128), [t,z,y,x]
plt.contourf(u[0,:,:,0]) # time[0], z[:], y[:], x[0]

下面是我尝试用MatLab进行翻译的方法。数组的大小与Python解释的大小(128,128,124,1)和维度(x,y,z,time)的大小相反。我是个新手,不知道如何复制代码。在MatLab中,Size()函数中不包括时间维度。如何使用数组切片在MatLab中绘制等高线图,以复制上面的Python代码中的结果?

filename = 'XYZ_time_1.nc';
ncdisp(filename);
u = ncread(filename, 'u'); # size(128, 128, 124), time not included?
contour(:,:,1) # (x, y, z)

上面的MatLab代码将适用于下面的特殊情况。数组索引是我开始迷路的地方。对于固定的x[index],我希望能够y[:]对z[:]。您如何安排索引片才能使其工作?

print(np.shape(nc.variables["u"][0,0,:,:])) # t[0], z[0], y[:],x[:]
plt.contourf(nc.variables['u'][0,0,:,:])
sqxo8psd

sqxo8psd1#

我已经能够使用MatLab置换函数回答我自己的问题。如果您正在尝试将数组切片在Python语言中转换为MatLab,它可能如下所示。

# In python 
import netCDF4 as NC
from netCDF4 import Dataset as NetCDFFile 
import matplotlib.pyplot as plt
import numpy as np

nc = NetCDFFile('XYZ_time_1.nc')
u = nc.variables["u"][:,:,:,:]
plt.contourf(u[0,:,:,0]) # time[0], z[:], y[:], x[0]

翻译成matlab的是

% In MATLAB
S = permute(u, [3,2,1]) % rearranges the vector to be [z, y, x] 
contourf(S(:,:,1))

相关问题