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



我使用NetCDF数据在python中创建了一个等高线图。我画的是x方向上的速度,形状为(112412128(,其中维度为(时间,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的新手,不确定如何复制代码。在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代码将适用于下面python中的特殊情况。数组索引是我开始迷失的地方。对于固定的x[索引],我希望能够y[:]vs z[:]。如何安排索引切片以使其工作?

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

我已经能够使用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))

最新更新