ncdf文件的尺寸长度不同

时间:2014-05-19 10:03:01

标签: r netcdf

我是R的新手,我试图用R绘制网格几天,但不成功。 我在我所在的地区获得了ecmwf ERA Interim 2013年的降水数据,因为我的ncdf文件的尺寸长度不同,我无法绘制网格。如果有人可以帮助我真的很棒。

Google云端硬盘中我的.nc数据:https://drive.google.com/file/d/0B0X5ssvd281gUnIyUkZHRGs1a0k/edit?usp=sharing

我使用代码:

> library(ncdf)
> precipitation = open.ncdf("precipitation_2013.nc")
> lonmat  = get.var.ncdf(nc= precipitation,varid="longitude")
> latmat  = get.var.ncdf(nc= precipitation,varid="latitude")
> plot(lonmat, latmat, main= "Precipitation grid 2013")

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

我从未处理过geo-NetCDF文件,但是当你查看文件时,你会看到实际发生的事情:

print(precipitation)
[1] "file ~/Downloads/precipitation_2013.nc has 3 dimensions:"
[1] "longitude   Size: 8"
[1] "latitude   Size: 5"
[1] "time   Size: 730"
[1] "------------------------"
[1] "file ~/Downloads/precipitation_2013.nc has 1 variables:"
[1] "short tp[longitude,latitude,time]  Longname:Total precipitation Missval:-32767"

您的实际数据有一个short类型的变量,其中包含三个维longitudelatitudetime。维度的值存储为单独的变量,而收集值的变量仅引用维度。所以这个问题独立于 NetCDF 地理信息系统问题:这是什么,你实际上想要在拥有值时绘图

> latmat
[1] 60.0 58.5 57.0 55.5 54.0
> lonmat
[1] 19.5 21.0 22.5 24.0 25.5 27.0 28.5 30.0

您可以通过提取实际变量来构建数据,将其以长格式显示,并将维值分配给生成的data.frame

library(reshape2)
tp.molten <- melt(get.var.ncdf(nc= precipitation,varid="tp"), varnames=c("longitude", "latitude", "time"))
tp.molten$longitude <- lonmat[tp.molten$longitude]
tp.molten$latitude <- lonmat[tp.molten$latitude ]
tp.molten$time<- get.var.ncdf(nc= precipitation,varid="time")[tp.molten$time ]

close.ncdf( precipitation ) # don't forget

head(tp.molten)
longitude latitude   time       value
1      19.5     19.5 990564 0.002813700
2      21.0     19.5 990564 0.004143370
3      22.5     19.5 990564 0.006473583
4      24.0     19.5 990564 0.008655690
5      25.5     19.5 990564 0.007778240
6      27.0     19.5 990564 0.005223891

现在你可以通过一个时间点将这些数据子集化并在lon-lat-g​​rid上绘制

library(ggplot2)
ggplot( data = tp.molten[ tp.molten$time == 992052, ], aes( x = latitude, y = longitude, fill = value ) ) +
  geom_raster()

enter image description here