2013-12-11 2 views
1

Я пытался сюжет следующий файл NetCDF географической привязкой: «air.1999.nc» найти на следующем веб-сайте:R - Заговор NetCDF климатические данные

http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.html

Я попытался ниже код, основанный на ответы, которые я нашел здесь и в других местах, но не повезло.

library(ncdf); 
temp.nc <- open.ncdf("air.1999.nc"); 
temp <- get.var.ncdf(temp.nc,"air"); 

temp.nc$dim$lon$vals -> lon 
temp.nc$dim$lat$vals -> lat 

lat <- rev(lat) 
temp <- temp[nrow(temp):1,] 

temp[temp==-32767] <- NA 
temp <- t(temp) 

image(lon,lat,temp) 
library(maptools) 
data(wrld_simpl) 
plot(wrld_simpl, add = TRUE) 

Этот код был изменен из одного из найденных здесь: The variable from a netcdf file comes out flipped

Кто-нибудь есть какие-либо идеи или опыт работы с использованием этих типов NetCDF файлов? Спасибо

+0

делает этот пример помощи? [rworldmap RJournal paper] (http://journal.r-project.org/archive/2011-1/RJournal_2011-1_South.pdf) стр. 41: Использование 'rworldmap' для сопоставления данных netCDF в тандеме с' ncdf' – Andy

+0

Это идет что-то вроде примера, но я скорее надеялся, что смогу увидеть рабочий пример кода, необходимого для построения данных, о которых я упоминал. Но спасибо за ссылку, изучите ее дальше. – fjd

+0

Быстро посмотрев, что я буду делать, это использовать пакет «растр», который теперь лучше, чем мой, для выполнения растровых и netcdf-операций. Попробуйте это сообщение stackoverflow и ссылки из него: [http://stackoverflow.com/questions/19330710/why-do-i-get-different-results-in-plotting-a-netcdf-layer-with-imagex-yz- an] (http://stackoverflow.com/questions/19330710/why-do-i-get-different-results-in-plotting-a-netcdf-layer-with-imagex-yz-an) – Andy

ответ

4

В вопросе, который вы связывали всю деталь от lat <- rev(lat) до temp <- t(temp), был очень специфичен для этого конкретного набора данных OP и не имеет абсолютно никакого универсального значения.

temp.nc <- open.ncdf("~/Downloads/air.1999.nc") 
temp.nc 
[1] "file ~/Downloads/air.1999.nc has 4 dimensions:" 
[1] "lon Size: 144" 
[1] "lat Size: 73" 
[1] "level Size: 12" 
[1] "time Size: 365" 
[1] "------------------------" 
[1] "file ~/Downloads/air.1999.nc has 2 variables:" 
[1] "short air[lon,lat,level,time] Longname:Air temperature Missval:32767" 
[1] "short head[level,time] Longname:Missing Missval:NA" 

Как вы можете видеть из этих информаций, в вашем случае, пропущенные значения представлены значениями 32767 поэтому следующий должна быть вашим первым шагом:

temp <- get.var.ncdf(temp.nc,"air") 
temp[temp=="32767"] <- NA 

цен добавляются в вашем случае у вас есть 4 размеры ваших данных, а не только 2, это долгота, широта, уровень (который я предполагаю, представляют собой высоту) и время.

temp.nc$dim$lon$vals -> lon 
temp.nc$dim$lat$vals -> lat 
temp.nc$dim$time$vals -> time 
temp.nc$dim$level$vals -> lev 

Если вы посмотрите на lat вы видите, что значения в обратном направлении (что image будет неодобрительно), так что давайте сторнировать их:

lat <- rev(lat) 
temp <- temp[, ncol(temp):1, , ] #lat being our dimension number 2 

Тогда долгота выражается от 0 до 360 который не является стандартным, он должен быть от -180 до 180, так что давайте менять что:

lon <- lon -180 

Итак, теперь давайте построить данные на уровне 1000 (т.е. пихта й один) и первая дата:

temp11 <- temp[ , , 1, 1] #Level is the third dimension and time the fourth. 
image(lon,lat,temp11) 

А потом давайте наложите карту мира:

library(maptools) 
data(wrld_simpl) 
plot(wrld_simpl,add=TRUE) 

enter image description here

+0

Спасибо за ответ и пример кода, который работает, очень ценится. – fjd

+2

Коррекция громкости неверна. Вы можете увидеть Африку в Тихом океане. Это должно быть '' lon [lon> 180] <- lon[lon > 180] - 360'', я считаю. – kennyB

+0

@kennyB Вы правы! –