# 导入库
rm(list = ls())
library(ncdf4)
library(ncdf4.helpers)
library(data.table)
library(pracma)
path <- "I:/jiang/第二章/plot/lin_ta.nc"
nc <- nc_open(path)
lat = ncvar_get(nc,"latitude")
lon = ncvar_get(nc,"longitude")
time = ncvar_get(nc,"time")
time <- nc.get.time.series(nc)
ta <- ncvar_get(nc,"t2m")
lin <- ncvar_get(nc,"msdwlwrf")
# 计算年均值
year <- seq(1980,2023)
ta_result <- array(NA,dim = c(length(lon),length(lat),length(year)))
lin_result <- array(NA,dim = c(length(lon),length(lat),length(year)))
for (i in 1:length(year)) {
print(i)
start <- grep(paste0(year[i],"-06","-01"),time)
end <- grep(paste0(year[i],"-09","-01"),time)
bb = ta[,,start:end]
dd <- lin[,,start:end]
ta_result[,,i] <- apply(bb, c(1,2), mean)
lin_result[,,i] <- apply(dd, c(1,2), mean)
}
dim(ta_result)
# 计算相关性
r <- array(dim = c(length(lon),length(lat)))
p <- array(dim = c(length(lon),length(lat)))
for (i in 1:length(lon)) {
for (j in 1:length(lat)) {
test_result <- cor.test(detrend(ta_result[i,j,]),detrend(lin_result[i,j,]), method = "pearson")
r[i,j] <- test_result$estimate
p[i,j] <- test_result$p.value
}
}
# 写出NC文件
nc_file <- "d:/correlation.nc"
# 创建NetCDF文件写出,用作python绘图
londim <- ncdim_def("lon","degrees_east",as.double(lon))
latdim <- ncdim_def("lat","degrees_north",as.double(lat))
tmp_def <- ncvar_def("r","%",list(londim,latdim),prec="double")
p_def <- ncvar_def("p","%",list(londim,latdim),prec="double")
ncout <- nc_create(nc_file,list(tmp_def,p_def),force_v4=TRUE)
ncvar_put(ncout,tmp_def,r)
ncvar_put(ncout,p_def,p)
nc_close(ncout)
有问题请咨询!!!!!!!
zhufei17@163.com