在R中打印时netCDF的横向/纵向问题

在R中打印时netCDF的横向/纵向问题,r,arrays,netcdf,r-raster,R,Arrays,Netcdf,R Raster,我试图使用netCDF4软件包从in R读取/绘制每月海底温度数据,但遇到了经度数据显示不正确的障碍。我检查了Panoply中的数据,它在那里绘制得非常完美,但当我在R中绘制时,经度不正确: 我尝试过旋转和转置数据,但没有任何效果,因此我非常希望找到一个解决方案。下面是我正在使用的代码。多谢各位 nc_data <- nc_open("tob_Omon_MPI-ESM1-2-HR_ssp126_r1i1p1f1_gn_201501-201912.nc") # Sav

我试图使用netCDF4软件包从in R读取/绘制每月海底温度数据,但遇到了经度数据显示不正确的障碍。我检查了Panoply中的数据,它在那里绘制得非常完美,但当我在R中绘制时,经度不正确:

我尝试过旋转和转置数据,但没有任何效果,因此我非常希望找到一个解决方案。下面是我正在使用的代码。多谢各位

nc_data <- nc_open("tob_Omon_MPI-ESM1-2-HR_ssp126_r1i1p1f1_gn_201501-201912.nc")

# Save the print(nc) dump to a text file
{
  sink('tob_Omon_MPI-ESM1-2-HR_ssp126_r1i1p1f1_gn_201501-201912_metadata.txt')
  print(nc_data)
  sink()
}

lon <- ncvar_get(nc_data, "longitude", verbose = F)
lon[lon > 180] <- lon[lon > 180] - 360
range(lon)
lat <- ncvar_get(nc_data, "latitude", verbose = F)
range(lat)
t <- ncvar_get(nc_data, "time")

tob.array <- ncvar_get(nc_data, "tob") # store the data in a 3-dimensional array
dim(tob.array) 

fillvalue <- ncatt_get(nc_data, "tob", "_FillValue")
fillvalue


tob.array[tob.array == fillvalue$value] <- NA # change NA values to the standard 'NA'

tob.2015 <- tob.array[,,1:12] # subset of 2015 data

# convert 2015 to raster brick
brick_2015 <- brick(tob.2015, xmn=min(lon), xmx=max(lon), ymn=min(lat), ymx=max(lat), crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ towgs84=0,0,0"))
plot(brick_2015) # inspect 
brick_2015 <- (t(brick_2015)) # transpose 
plot(brick_2015) # inspect
mean.2015 <- calc(brick_2015, mean) # save as one raster object
plot(mean.2015)


基于NetCDF文件中的元数据,这是一个相当难处理的网格。在R中解决这些问题通常是不值得的。在这些情况下,我个人的偏好是使用气候数据操作符重新生成常规latlon网格:

cdo remapbil,r360x180 tob_Omon_MPI-ESM1-2-HR_ssp126_r1i1p1f1_gn_201501-201912.nc out.nc