Daugiau

Ar galima R paveikslėlyje () nukirpti formos failą?

Ar galima R paveikslėlyje () nukirpti formos failą?


Aš dirbu atvaizduodamas kai kuriuos „netcdf“ duomenis R ir sunkiai bandau atlikti klipą su importuojamos šalies formos failu, kurį naudoju. Štai mano vakarykštis klausimas. Jei ką nors žinote apie tai, nedvejodami užsukite ten ir atsakykite į šį klausimą. :)

BET aš čia pradėsiu šviežiai. Taigi, mano darbui mes planuojame kartoti daugybę tonų orų duomenų visame pasaulyje. Praktikai, mūsų duomenis teikiantis vaikinas pateikė mums „pavyzdinių“ duomenų, su kuriais galėtume žaisti. Mano viršininkas norėtų, kad aš sukurčiau savo žemėlapius R. Šie žemėlapiai yra skirti grįžtamojo laikotarpio žemėlapiams. Duomenys pateikiami netcdf formatu. Galėjau susieti netcdf duomenis su „levelplot“ funkcija iš „rasterVis“ paketo. Taip pat man pavyko susieti netcdf duomenis su paprasta vaizdo funkcija. Štai mano kodas (atsiprašau už nemalonius vardų suteikimo įpročius; aš ką tik žaidžiau su tuo):

biblioteka (maptools) biblioteka (ncdf4) biblioteka (RColorBrewer) biblioteka (rastras) setwd ("D:  stuff") #Madagaskaras shapefile madagaskaras <- readShapeSpatial ("MDG_adm0.shp") sklypas (madagaskaras) #Chall netcdf faile ncdf .data <- nc_open ("swio_rpmaps_200_83.nc") #Paskambinkite 10 metų vėjo grąžinimo laikotarpiams grąžindami <- ncvar_get (ncdf.data, "y010") #Define platuma ir ilguma lon <- ncdf.data $ dim $ longitude $ vals lat <- ncdf.data $ dim $ latitude $ vals # windspeeds vaizdo vaizdas (lon, lat, return, col = cm.colors (9, alfa = .6), add = TRUE) #plot Madagaskaras viršuje greičio ruožas (Madagaskaras, pridėti = T)

Štai rezultatas:

Ar yra kokiu nors būdu prikabinti Madagaskaro formos failą prie šio vaizdo? Arba kitas būdas manipuliuoti duomenimis, kad galėčiau atlikti klipą? Geriausia, jei duomenis turėčiau susieti tik su bet kurios šalies, kuriu žemėlapiu, ribomis.


Paimkite @hrbrmstr pasiūlymą čia yra kodas. Kadangi nepateikiate failo pavyzdžio, bandau imituoti jūsų situaciją ir sukurti pavyzdį taip, kaip galėtumėte tai padaryti naudodami savo netcdf failą. Formos failą, kurį išgaunu iš natūralios Žemės.

biblioteka (maptools) biblioteka (rastras) madagaskaras <- readShapeSpatial ("MDG_adm0.shp") ## sudaro kai kurias reikšmes # Aš bandau pakartoti taip, kaip tai darytumėte, naudodamas netcdf failą ... lon <- sek (42, 51 , .05) lat <- seka (-29, -10, .1) grąžina <- runif (ilgis (lat) * ilgis (ilgis)) vaizdą (ilgis, latas, matrica (grąžina, ilgis (ilgis), ilgis ( lat)), col = cm. spalvos (9, alfa = .6)) siužetas (Madagaskaras, pridėti = T)

Tada mes naudojame netcdf failo reikšmes, kad sukurtume tikrąjį rastro objektą (tiksliau - „RasterLayer“), su kuriuo galite dirbti. Norėdami tai padaryti, turime nustatyti rastro matmenis (nrows ir ncols), taip pat min ir max vertes abiem matmenims (x ir y). Tada mes naudojamesetValuesfunkcija pridėti kiekvieno rastro langelio vertes (jūsų atveju - greičio greičius).

ATNAUJINTI: Užuot tai padarę, sukurkite „Raster“ objektą tiesiogiai, kaip nurodyta @RobertH.

# sukurkite rastro objektą naudodami reikšmes iš viršaus r <- rastras (nrows = ilgis (lon), ncols = ilgis (lat), xmn = min (lon), xmx = max (lon), ymn = min (lat), ymx = max (lat)) r <- setValues ​​(r, return) plot (r) plot (madagaskaras, pridėti = T)

Galiausiai mes naudojamekaukėfunkcija klipui rastrą. Ši funkcija naudoja bet kokį „Spatial *“ objektą kaip kaukę, o „SpatialPolygonsDataframe“ (kaip ir jūsų madagaskaras) yra vienas iš jų.

#clip r.clipped <- kaukė (r, Madagaskaras) sklypas (r.clipped)


Pridedant prie „Cengel“ atsakymo, parodykite, kaip gauti prieigą prie ncdf failo kaip „RasterBrick“ objekto, o po to:

biblioteka (rastras) madagaskaras <- shapefile ("MDG_adm0.shp") b <- rastras ("swio_rpmaps_200_83.nc", var = "y010") bb <- pasėlis (b, madagaskaras) bb <- kaukė (bb, madagaskaras)

Žiūrėti video įrašą: R 공간 데이터 1: SHP 파일에서 읽기