Plotting netcdf in R with correct grid

后端 未结 1 1958
[愿得一人]
[愿得一人] 2021-01-26 02:49

My goal is to plot nitrate (no3) data on a world map, using the correct longitude and latitude for these data.

There are two netcdf files:
1. with the data
2. wi

相关标签:
1条回答
  • 2021-01-26 02:49
    library(ncdf)
    data <- open.ncdf(file1)
    no3 <- get.var.ncdf(data,varid="no3")
    sigma_plot <- no3[,,20]
    grid <- open.ncdf(file2)
    plon <- get.var.ncdf(grid,varid="plon")
    plat <- get.var.ncdf(grid,varid="plat")
    

    Contrary to what I previously understood, each cell of sigma_plot corresponds to one cell of plon and plat.

    A <- array(c(plon,plat,a),dim=c(180,193,3))
    B <- apply(A, 3, cbind)
    

    Now B is an array containing for each row: (longitude, latitude, value). But it is not a regular grid, so you need to interpolate a regular grid. Easiest way would be using interp from package akima:

    library(akima)
    C <- interp(B[,1],B[,2],B[,3], 
                xo=seq(-180,180,1),yo=seq(-90,90,by=1), #you can tweak here the resolution
                duplicate='mean') #for some reasons some entries are duplicates, i don t know how you want to handle it.
    
    image(C) #for instance, or filled.contour if you prefer
    library(maptools)
    data(wrld_simpl)
    plot(wrld_simpl, add=TRUE, col="white") #To add a simple world map on top
    
    0 讨论(0)
提交回复
热议问题