Saya memiliki file NetCDF dari permukaan probabilitas. Ini adalah kisi 30x30 dengan interval lintang/bujur 0,25 derajat dengan permukaan probabilitas yang dijelaskan dalam dimensi z. Saya dapat dengan mudah mengimpor ini ke Panoply, penampil NetCDF:
Dan kemudian sangat mudah (memeriksa satu kotak) untuk menginterpolasi/memperhalus data mentah ke ukuran kisi yang lebih halus:
Namun, saya tidak hanya ingin memvisualisasikan data, saya ingin memplotnya dalam R bersama dengan batimetri dan data titik. Itu semua tidak masalah, tetapi saya belum menemukan cara langsung untuk menginterpolasi data grid di R. Berikut kode yang saya gunakan untuk mengimpor dan memplot data:
library(RNetCDF)
nc <- open.nc("132235-1.nc")
print.nc(nc)
tmp <- read.nc(nc)
probs<-tmp$likelihoods
xran <- range(tmp$longitude)
yran <- range(tmp$latitude)
zran <- range(probs,na.rm=T)
lon <- tmp$longitude
lat <- tmp$latitude[30:1]
z <- array(probs, dim=dim(probs))
z <- z[,rev(seq(ncol(z)))]
z <- z[,seq(ncol(z))]
prob.pal<-colorRampPalette(
c("#C1FFC1","#8FBC8F","#2F4F4F")
)
zbreaks <- seq(0.0001, 0.063, by=0.001)
cols<- c(prob.pal(length(zbreaks)-1))
png("ProbTest.png", width=7.5, height=6, units="in", res=200)
layout(matrix(1:2, 1,2), widths=c(6,1.5), heights=c(6))
par(mar=c(2,2,1,1), ps=10)
image(lon, lat, z=z, col=cols, breaks=zbreaks, useRaster=TRUE, ylim=c(13,28), xlim=c(-115,-100))
dev.off()
Dan saya berakhir dengan ini, yang sama dengan menggunakan Panoply tetapi dengan skema warna yang berbeda:
Apakah ada cara langsung untuk menginterpolasi/memuluskan data ini? Saya tahu cara membuat kepadatan pemanfaatan kernel, dll., menggunakan data titik, tetapi tidak menggunakan data grid.
Banyak terima kasih atas bantuan Anda!
1 menjawab
Ini adalah solusi yang saya pikir Anda cari, yang menggunakan resampling bilinear. Namun ini bukan satu-satunya cara untuk melakukan interpolasi seperti itu dan Anda mungkin perlu membenarkan untuk tidak menggunakan pendekatan yang lebih canggih (misalnya geostatistik, splines, dll.):
library(raster)
set.seed(2002)
## Create an extent boundary:
ex <- extent(c(0, 20, 0, 20))
## Simulate a coarse raster:
r.small <- raster(ex, vals=rnorm(10*10, mean=5, sd=1), nrow=10, ncol=10)
## Simulate the grid of a finer-scale raster:
r.big <- raster(ncol=200, nrow=200, ext=ex)
## Resample the coarser raster to match finer grid:
r.res <- resample(x=r.small, y=r.big, method="bilinear")
plot(r.small)
plot(r.res)
Kasar:
Bagus:
raster
karena kerja keras mereka membuat hal semacam ini menjadi sangat mudah di R.
raster()
ataubrick()
dan kemudian menghaluskan data ke resolusi skala yang lebih baik menggunakanresample()
.