R의 image()에 shapefile을 자를 수 있습니까?

R의 image()에 shapefile을 자를 수 있습니까?


저는 R에서 일부 netcdf 데이터를 매핑하는 작업을 하고 있으며 제가 사용하고 있는 가져온 국가 모양 파일로 클립을 수행하는 데 어려움을 겪고 있습니다. 어제부터 제 질문입니다. 그것에 대해 아는 것이 있으면 언제든지 거기에 가서 해당 질문에 답하십시오. :)

하지만 여기서 새롭게 시작하겠습니다. 그래서 제 작업을 위해 전 세계의 수많은 날씨 데이터를 매핑할 계획입니다. 연습을 위해 우리 데이터를 제공하는 사람이 우리에게 가지고 놀 수 있는 "예시" 데이터를 제공했습니다. 내 상사는 내가 R로 내 지도를 만들기를 원합니다. 이 지도는 반환 기간 지도를 위한 것입니다. 데이터는 netcdf 형식입니다. rasterVis 패키지의 levelplot 기능으로 netcdf 데이터를 매핑할 수 있었습니다. 또한 간단한 이미지 기능으로 netcdf 데이터를 매핑할 수 있었습니다. 여기 내 코드가 있습니다.

library(maptools) library(ncdf4) library(RColorBrewer) library(raster) setwd("D:stuff") #Madagascar shapefile madagascar <- readShapeSpatial("MDG_adm0.shp") plot(madagascar) #netcdf 파일 ncdf 호출 .data <- nc_open("swio_rpmaps_200_83.nc") #10년 바람 반환 기간에 대한 호출은 <- ncvar_get(ncdf.data, "y010") #위도 및 경도 정의 lon <- ncdf.data$dim$longitude$ vals lat <- ncdf.data$dim$latitude$vals #풍속 이미지 이미지(lon, lat, returns, col = cm.colors(9,alpha=.6), add = TRUE) #plot Madagascar on top 풍속 플롯(마다가스카르, 추가 = T)

결과 이미지는 다음과 같습니다.

마다가스카르 셰이프 파일을 이 이미지에 클립할 수 있는 방법이 있습니까? 또는 클립을 수행할 수 있도록 데이터를 조작하는 다른 방법은 무엇입니까? 이상적으로는 매핑 중인 국가의 경계 내에서만 데이터를 연결해야 합니다.


@hrbrmstr의 제안에 따라 여기에 코드가 있습니다. 당신이 샘플 파일을 제공하지 않기 때문에 나는 당신의 상황을 모방하고 당신이 netcdf 파일로 할 수 있는 방법으로 샘플을 만들려고 노력합니다. Natural Earth에서 추출한 shapefile입니다.

library(maptools) library(raster) madagascar <- readShapeSpatial("MDG_adm0.shp") ## 값을 구성합니다 # netcdf 파일을 사용하여 수행하는 방식을 복제하려고 합니다... lon <- seq(42, 51 , .05) lat <- seq(-29, -10, .1)은 <- runif(length(lat) * length(lon)) image(lon, lat, matrix(returns, length(lon), length( 위도)), 열 = cm.colors(9,알파=.6)) 플롯(마다가스카르, 더하기 = T)

다음으로 netcdf 파일의 값을 사용하여 작업할 수 있는 실제 래스터 개체(정확히 말하면 RasterLayer)를 만듭니다. 이렇게 하려면 래스터의 차원(nrows 및 ncols)과 두 차원(x 및 y)에 대한 최소 및 최대 값을 설정해야 합니다. 우리는 다음을 사용합니다setValues함수를 사용하여 각 래스터 셀에 대한 값(귀하의 경우 풍속)을 추가합니다.

업데이트: 이렇게 하는 대신 @RobertH 에서 설명한 대로 직접 Raster 개체를 만듭니다.

# 위의 값을 사용하여 래스터 객체를 생성합니다. r <- raster(nrows=length(lon), ncols=length(lat), xmn=min(lon), xmx=max(lon), ymn=min(lat) , ymx=max(lat)) r <- setValues(r, 반환) plot(r) plot(마다가스카르, 더하기 = T)

마지막으로 우리가 사용하는마스크래스터를 자르는 기능. 이 함수는 모든 Spatial* 개체를 마스크로 사용하며 SpatialPolygonsDataframe(마다가스카르의 것과 같은)이 그 중 하나입니다.

#clip r.cliped <- mask(r, 마다가스카르) 플롯(r.cliped)


cengel의 답변에 추가하여 ncdf 파일에 RasterBrick 개체로 액세스하는 방법을 보여주고 다음을 계속합니다.

라이브러리(래스터) 마다가스카르 <- shapefile("MDG_adm0.shp") b <- 래스터("swio_rpmaps_200_83.nc", var= "y010") bb <- 자르기(b, 마다가스카르) bb <- 마스크(bb, 마다가스카르)

비디오 보기: R 공간 데이터 1: SHP 파일에서 읽기