2016-06-26 3 views
1

Моя общая цель - создать график, в котором будет отображаться температура по времени. Я загрузил климатические данные с привязкой к сетке (файл NetCDF) для моей исследовательской области, содержащей Long, Lat, значение температуры и время для каждой ячейки сетки. Я импортировал файл в R, используя RNetCDF. Это в коде, я использовал для этого:Построение графика временной температуры с использованием файла NetCDF в R

Grid_Temp <- "FULL_TMP_cru_ts3.23.1901.2014.tmp.dat_65-80E_35-45N.nc" 
fid_T <- open.nc (Grid_Temp) 
print.nc(fid_T) 
Temp <- read.nc(fid_T) 
close.nc(fid_T) 

В результате я получаю список из 4 элементов: время (1d), долгота (1D), широта (1D) и ТМП (3D: Long, Lat ,Время).

Я не знаю, как я могу использовать этот выход для создания моего сюжета. Прежде всего, я хочу ограничить элемент времени. В данный момент время идет с 1901-2014. Однако мне нужно начать с 1930 года. Время в месяцах, то есть элемент времени содержит числа от 0: 1368, так как месяцы нумеруются последовательно. Мне нужно начинать с номера 360. Может ли кто-нибудь помочь мне, как я могу ограничить свое время?

И для участка: Мне нужно время (1930-2014) по оси x, а по оси Y - средняя температура области исследования. На данный момент я не знаю, как бороться с таким списком и, следовательно, не знаю, как я могу создать этот сюжет.

Большое спасибо за каждый ответ! Я делаю это для моей магистерской диссертации, и я новичок в R, поэтому я ценю все виды помощи и подсказок! Спасибо

+0

Добро пожаловать в StackOverflow. Пожалуйста, найдите время, чтобы прочитать это сообщение на [как предоставить отличный пример R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), а также как предоставить [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) и соответствующим образом пересмотреть свой вопрос. – lmo

ответ

0

Попробуйте перейти к ncdf4 упак и увидеть, если это помогает:

library(ncdf4) 
library(ggplot2) 
library(dplyr) 

# open the HadCRUT temp netcdf 
had <- nc_open("HadCRUT.4.4.0.0.median.nc") 

print(had) # not shown 

# get the data 

lon <- ncvar_get(had, "longitude") 
lat <- ncvar_get(had, "latitude") 
time <- ncvar_get(had, "time") 
temperature_anomaly <- ncvar_get(had, "temperature_anomaly") 

nc_close(had) # done with the file 

# ref origin for this one is diff than 
time <- as.Date(time, origin="1850-01-01") 

# pick a lat/lon pair 

(lon[10]) 
## [1] -132.5 

(lat[10]) 
## [1] -42.5 

data_frame(month=time, 
      temp=temperature_anomaly[10,10,], 
      col=ifelse(temp<0, "#b2182b", "#2166ac")) %>% 
    ggplot(aes(month, temp)) + 
    geom_point(aes(color=col), size=0.15) + 
    scale_color_identity() + 
    theme_bw() 
+0

Спасибо за быстрый ответ! Использование пакета ncdf4 работает лучше! Тем не менее, я все еще смущен тем, как установить время начала на 360-й месяц. Использование as.Date превращает мои данные в дни, а не в месяцы. Есть ли способ использовать что-то вроде origin = «1930-01» (в течение нескольких месяцев), а не origin = «1930-01-01»? Спасибо за помощь! –

+0

Можете ли вы разместить ссылку на файл 'FULL_TMP_cru_ts3.23.1901.2014.tmp.dat_65-80E_35-45N.nc'? – hrbrmstr

+0

Я загрузил файл с этого сайта. Я ограничил область до 35-45N и 65-80E и загрузил это ограниченное подмножество. https://climexp.knmi.nl/[email protected]&field=cru_tmp –

Смежные вопросы