Več

Ali je mogoče datoteko oblike pripeti na sliko () v R?


Delam na preslikavi nekaterih podatkov netcdf v R in sem se težko trudil, da bi posnel posnetek z uvoženo datoteko oblike države, ki jo uporabljam. Tu je moje vprašanje od včeraj. Če kaj veste o tem, vas prosimo, da priskočite tja in odgovorite na to vprašanje. :)

Ampak tukaj bom začel novo. Torej za moje delo načrtujemo preslikavo ton in ton vremenskih podatkov po vsem svetu. Za vajo nam je fant, ki je posredoval naše podatke, posredoval nekaj "zglednih" podatkov za igranje. Moj šef bi rad, da ustvarim svoje zemljevide v jeziku R. Ti zemljevidi naj bi bili zemljevidi povratnega obdobja. Podatki so v formatu netcdf. Podatke netcdf sem lahko preslikal s funkcijo levelplot iz paketa rasterVis. Podatke netcdf sem lahko tudi preslikal s preprosto slikovno funkcijo. Tu je moja koda (žal mi je za zabavne konvencije o poimenovanju; ravnokar sem se poigraval s tem):

knjižnica (maptools) knjižnica (ncdf4) knjižnica (RColorBrewer) knjižnica (raster) setwd ("D:  stuff") #Madagaskar shapefile madagascar <- readShapeSpatial ("MDG_adm0.shp") plot (madagaskar) #Call on netcdf file ncdf .data <- nc_open ("swio_rpmaps_200_83.nc") #Call na 10-letna obdobja vračanja vetra vrne <- ncvar_get (ncdf.data, "y010") # Določi zemljepisno širino in dolžino <- ncdf.data $ dim $ longitude $ vals lat <- ncdf.data $ dim $ latitude $ vals # plot image of windspeeds image (lon, lat, return, col = cm.colors (9, alpha = .6), add = TRUE) #plot Madagascar on top of ploskev hitrosti vetra (Madagaskar, dodaj = T)

Tu je slika rezultata:

Ali lahko na to sliko pripnete madagaskarsko obliko datoteke? Ali drug način manipulacije s podatki, tako da lahko izvedem posnetek? V idealnem primeru bi imel podatke povezane samo v mejah katere koli države, ki jo kartiram.


Tukaj je koda, ki se strinja s predlogom @hrbrmstr. Ker ne navedete vzorčne datoteke, poskušam posnemati vašo situacijo in ustvariti vzorec tako, kot bi to lahko storili z datoteko netcdf. File oblike, ki sem jo izvlekel iz Natural Earth.

knjižnica (maptools) knjižnica (raster) madagaskar <- readShapeSpatial ("MDG_adm0.shp") ## tvori nekaj vrednosti # Poskušam ponoviti način, kot bi to storili z datoteko netcdf ... lon <- seq (42, 51 , .05) lat <- seq (-29, -10, .1) vrne <- runif (length (lat) * length (lon)) image (lon, lat, matrica (vrne, dolžina (lon), length ( lat)), col = cm.colors (9, alpha = .6)) plot (Madagaskar, dodaj = T)

Nato z vrednostmi iz datoteke netcdf ustvarimo dejanski rastrski objekt (natančneje RasterLayer), s katerim lahko delate. Če želite to narediti, moramo nastaviti dimenzije rastra (nrows in ncols) ter vrednosti min in max za obe dimenziji (x in y). Nato uporabimosetValuesfunkcija za dodajanje vrednosti (v vašem primeru hitrosti vetra) za vsako rastrsko celico.

NADGRADNJA: Namesto tega ustvarite rasterski objekt neposredno, kot je opisal @RobertH.

# ustvarite rastrski objekt z uporabo vrednosti zgoraj r <- raster (nrows = dolžina (dolžina), ncols = dolžina (lat), xmn = min (dolžina), xmx = max (dolžina), ymn = min (lat), ymx = max (lat)) r <- setValues ​​(r, vrne) plot (r) plot (madagaskar, add = T)

Nazadnje uporabljamomaskofunkcija za izrezovanje rastra. Ta funkcija vzame kateri koli Spatial * objekt kot masko, SpatialPolygonsDataframe (kot je vaš madagaskar) pa je eden izmed njih.

#clip r.clipped <- plot (r, madagaskar) plot (r.clipped)


Če dodamo odgovor Centgela, da pokažemo, kako pridobiti dostop do datoteke ncdf kot objekt RasterBrick in nato nadaljujte:

knjižnica (raster) madagaskar <- shapefile ("MDG_adm0.shp") b <- raster ("swio_rpmaps_200_83.nc", var = "y010") bb <- crop (b, madagaskar) bb <- mask (bb, madagaskar)


Poglej si posnetek: Stiskanje datotek v Windows 7 (September 2021).