NetCDF文件坐标翻转:热带东大西洋热锋绘图异常求助
问题描述
我创建了名为temperature的变量,用于表示温度梯度以检测海洋热锋。绘制该变量时发现热带东大西洋区域的陆地部分(非洲及巴西部分区域)显示反转:非洲位于左侧、巴西位于右侧,仿佛经纬度符号颠倒。最初地图即呈现反转状态,我尝试转置文件进行修正,但问题仍未解决。不确定如何调整才能使经纬度符号恢复正确,特此求助。
相关R语言代码:
#Set the path for the NetCDF ncfile <- "C:/Users/mdolores.riesgo/Desktop/PhD_MB/PhD_Documents/Chapters/01_Chapter/01_RawData/CopernicusDataProducts/Var_Calculated/Fronts/2018/CMEMS_TropicalAtlantic_thetao_Aug2018_front.nc" #Import the netCDF nc <- nc_open(ncfile) print(nc) #details about the product dimensions <- names(nc$dim) print(dimensions) variables <- names(nc$var) print(variables) lon <- ncvar_get(nc, "longitude") lat <- ncvar_get(nc, "latitude") gradfront <- ncvar_get(nc, "Temperature") gradfront <- t(gradfront) grad <- raster(gradfront) extent(grad) <- c(min(lon), max(lon), min(lat), max(lat)) extent(grad) # 原代码拼写错误:entent -> extent #The result #class : Extent #xmin : -43.16667 #xmax : 19.33333 #ymin : -26.5 #ymax : 29.41667 plot(grad)
解决方案
1. 排查经纬度排序问题
先检查经纬度数组的顺序,这是地图反转的核心原因:
# 查看经度、纬度的数值排序方向 print(lon) print(lat)
如果输出显示经度从东到西递减(数值从19.33降到-43.17),说明数据列顺序和地图所需的西→东方向相反;若纬度从北到南递减,会导致南北反转。
2. 修正东西方向反转
如果经度是降序,直接反转数据列顺序即可:
# 反转gradfront的列,对应经度从西到东排列 gradfront <- gradfront[, ncol(gradfront):1] # 重新生成raster对象并设置范围 grad <- raster(gradfront) extent(grad) <- c(min(lon), max(lon), min(lat), max(lat)) plot(grad)
也可以用raster包的flip函数简化操作:
grad <- raster(gradfront) extent(grad) <- c(min(lon), max(lon), min(lat), max(lat)) # 沿x轴翻转,修正东西方向 grad <- flip(grad, direction = "x") plot(grad)
3. 修正南北方向反转(若存在)
如果同时出现南北颠倒,再沿y轴翻转:
grad <- flip(grad, direction = "y")
4. 修正代码拼写错误
原代码中entent(grad)是拼写错误,应为extent(grad),该错误不影响绘图,但会导致无法正确查看图层范围信息。
内容的提问来源于stack exchange,提问作者Lola Riesgo Torres
相关产品推荐
相关产品推荐

