r - 在 R 中绘图时 netCDF 的纬度/经度问题
问题描述
我正在尝试使用 netCDF4 包从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 中解决这些问题大多不值得。在这些情况下,我自己的偏好是使用气候数据运算符重新网格化到常规纬度网格:
cdo remapbil,r360x180 tob_Omon_MPI-ESM1-2-HR_ssp126_r1i1p1f1_gn_201501-201912.nc out.nc
推荐阅读
- string - 你可以自定义@info 颜色吗?
- android - Android如何在带有数据绑定的文本视图中使用字符串变量
- python - 盈透证券 - 未找到请求的安全定义
- amazon-web-services - 从 Secrets Manager 映射 AWS API Gateway HTTPIntegration 标头
- qt - 分配给已经在 QML 中定义的绑定的属性是否合法
- python-3.x - Python从简单图像中提取数字
- javascript - 如何在反应和提取数据中向制表器添加行
- angular - 全局图标库已弃用。FortAwesome/angular-fontawesome
- google-apps-script - 如何编写 Google 高级服务脚本
- javascript - JS 更改 ID 属性仅更改连续第一条记录上的 ID