从R

时间:2017-03-07 21:56:52

标签: r mapping netcdf temperature

我从[NARR](https://www.esrl.noaa.gov/psd/data/gridded/data.narr.monolevel.html)专门下载了温度数据"气温为2米" - 月份意味着

我使用包" 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

如果有人可以帮助我查看数据以及将温度数据映射到北美,这将是非常好的。

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用raster包将这些内容读入stack

> library(raster)
> air = stack("./air.2m.mon.mean.nc")

(注意,您可能需要使用netcdf驱动程序编译的光栅包...)

然后您可以按片或时间名称绘制它们:

> plot(air[[23]])
> plot(air[["X1979.10.01.01.01.15"]])

enter image description here

堆栈打印如下:

> 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)

enter image description here

将任何其他数据转换为此系统可能会更好,并保持网格不被投影。只需查看如何处理R中的空间数据,以获取有关投影和变换的更多信息。