从 R 中的 .nc 文件映射温度数据
Mapping temperature data from an .nc file in R
我从 [NARR] (https://www.esrl.noaa.gov/psd/data/gridded/data.narr.monolevel.html) 下载了温度数据,特别是 "Air temperature at 2m" -月平均值
我使用包 "ncdf4" 打开了文件。数据有 4 个维度——时间、x、y、nbnds。 y 对应于 lat,x 对应于 lon。有一个称为空气的变量(不是维度)我不知道如何使用,尽管这是温度信息。
我的最终目标是在北美地图上绘制温度数据,使用每年每个月的平均温度数据(12 张地图,每个月一张)。
我无法确定如何使用数据,因为所有维度都是非常长的似乎没有意义的数字列表(例如,x 坐标如下所示:6232896 6265359 6297822 6330285 6362748 6395211 6427674 6460137 6492600 6525063 6557526 6589989,y值和时间也是如此)。
这是我用来查看尺寸的代码:
temp2m <- nc_open("air.2m.mon.mean.nc")
time <- temp2m$dim$time$vals
lat <- temp2m$dim$x$vals
lon <- temp2m$dim$y$vals
nbnds <- temp2m$dim$nbnds$vals
如果有人可以帮助我查看数据并将温度数据映射到北美,那就太好了。
谢谢!
您可以使用 raster
包将这些读入 stack
:
> library(raster)
> air = stack("./air.2m.mon.mean.nc")
(注意,你可能需要用netcdf驱动编译的光栅包...)
然后您可以按切片或按时间名称绘制它们:
> plot(air[[23]])
> plot(air[["X1979.10.01.01.01.15"]])
堆栈打印如下:
> air
class : RasterStack
dimensions : 277, 349, 96673, 450 (nrow, ncol, ncell, nlayers)
resolution : 32462.99, 32463 (x, y)
extent : -16231.49, 11313351, -16231.5, 8976020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=lcc +x_0=5632642.22547 +y_0=4612545.65137 +lat_0=50 +lon_0=-107 +lat_1=50 +lat_2=50 +ellps=WGS84
names : X1979.01.01.00.01.15, X1979.02.01.00.01.15, X1979.03.01.00.01.15, X1979.04.01.01.01.15, X1979.05.01.01.01.15, X1979.06.01.01.01.15, X1979.07.01.01.01.15, X1979.08.01.01.01.15, X1979.09.01.01.01.15, X1979.10.01.01.01.15, X1979.11.01.00.01.15, X1979.12.01.00.01.15, X1980.01.01.00.01.15, X1980.02.01.00.01.15, X1980.03.01.00.01.15, ...
并且这些坐标并不是真正的经纬度,而是在由 "coord. ref." 字符串描述的转换坐标系中。如果你想把它放在经纬度地图上,你需要扭曲它:
> air_ll = projectRaster(air[[1]],crs="+init=epsg:4326")
> plot(air_ll)
您最好将任何其他数据转换到此系统,并保持网格未投影。只需查看如何处理 R 中的空间数据,即可获得有关投影和变换的更多信息。
我从 [NARR] (https://www.esrl.noaa.gov/psd/data/gridded/data.narr.monolevel.html) 下载了温度数据,特别是 "Air temperature at 2m" -月平均值
我使用包 "ncdf4" 打开了文件。数据有 4 个维度——时间、x、y、nbnds。 y 对应于 lat,x 对应于 lon。有一个称为空气的变量(不是维度)我不知道如何使用,尽管这是温度信息。
我的最终目标是在北美地图上绘制温度数据,使用每年每个月的平均温度数据(12 张地图,每个月一张)。
我无法确定如何使用数据,因为所有维度都是非常长的似乎没有意义的数字列表(例如,x 坐标如下所示:6232896 6265359 6297822 6330285 6362748 6395211 6427674 6460137 6492600 6525063 6557526 6589989,y值和时间也是如此)。
这是我用来查看尺寸的代码:
temp2m <- nc_open("air.2m.mon.mean.nc")
time <- temp2m$dim$time$vals
lat <- temp2m$dim$x$vals
lon <- temp2m$dim$y$vals
nbnds <- temp2m$dim$nbnds$vals
如果有人可以帮助我查看数据并将温度数据映射到北美,那就太好了。
谢谢!
您可以使用 raster
包将这些读入 stack
:
> library(raster)
> air = stack("./air.2m.mon.mean.nc")
(注意,你可能需要用netcdf驱动编译的光栅包...)
然后您可以按切片或按时间名称绘制它们:
> plot(air[[23]])
> plot(air[["X1979.10.01.01.01.15"]])
堆栈打印如下:
> air
class : RasterStack
dimensions : 277, 349, 96673, 450 (nrow, ncol, ncell, nlayers)
resolution : 32462.99, 32463 (x, y)
extent : -16231.49, 11313351, -16231.5, 8976020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=lcc +x_0=5632642.22547 +y_0=4612545.65137 +lat_0=50 +lon_0=-107 +lat_1=50 +lat_2=50 +ellps=WGS84
names : X1979.01.01.00.01.15, X1979.02.01.00.01.15, X1979.03.01.00.01.15, X1979.04.01.01.01.15, X1979.05.01.01.01.15, X1979.06.01.01.01.15, X1979.07.01.01.01.15, X1979.08.01.01.01.15, X1979.09.01.01.01.15, X1979.10.01.01.01.15, X1979.11.01.00.01.15, X1979.12.01.00.01.15, X1980.01.01.00.01.15, X1980.02.01.00.01.15, X1980.03.01.00.01.15, ...
并且这些坐标并不是真正的经纬度,而是在由 "coord. ref." 字符串描述的转换坐标系中。如果你想把它放在经纬度地图上,你需要扭曲它:
> air_ll = projectRaster(air[[1]],crs="+init=epsg:4326")
> plot(air_ll)
您最好将任何其他数据转换到此系统,并保持网格未投影。只需查看如何处理 R 中的空间数据,即可获得有关投影和变换的更多信息。