2017-12-15 19 views
1

나는 다음과 같은 다각형을 사용하여 choropleth지도를 그릴 싶습니다 :각 다각형 내에서 관측치의 choropleth을 그리는 방법은 무엇입니까?

library(sp) 
library(sf) 
library(spatialEco) 
library(tigris) 

br_tracts <- tracts(state = 'LA', county = 'East Baton Rouge', cb = T, year = 2016) 
plot(br_tracts) 

enter image description here

그럼, 각 다각형 내에 관측 지점의 수에 색상을 매핑하고 싶습니다. 다음은 샘플 데이터입니다. dtSpatial을 만들려면 티그리스 패키지를 업로드해야합니다.

pts.poly <- point.in.polygon(point.x = dtSpatial$longitude, 
          point.y = dtSpatial$latitude, 
          pol.x = fortify(br_tracts)$long, 
          pol.y = fortify(br_tracts)$lat) 

> pts.poly 
[1] 1 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 

을하지만 어떻게 각각의 다각형 내에서 관찰의 수와 색상을지도 않습니다

dtSpatial <- new("SpatialPointsDataFrame" 
    , data = structure(list(parenttype = c("garbage", "garbage", "garbage", 
"garbage", "garbage", "garbage", "garbage", "garbage", "garbage", 
"garbage", "garbage", "garbage", "garbage", "garbage", "garbage", 
"garbage", "garbage", "garbage", "garbage", "garbage")), .Names = "parenttype", row.names = c(NA, 
-20L), class = c("tbl_df", "tbl", "data.frame")) 
    , coords.nrs = numeric(0) 
    , coords = structure(c(-91.043777, -91.026382, 0, -91.027748, 0, -91.08049, 
-91.047173, -91.172501, -91.162384, -91.139465, -91.087585, -91.152748, 
-91.163086, -91.185814, -91.135101, 0, -91.105972, 0, -91.168846, 
-91.041435, 30.452148, 30.447191, 0, 30.412008, 0, 30.415289, 
30.420155, 30.430065, 30.478041, 30.460482, 30.429127, 30.469275, 
30.436682, 30.420218, 30.453447, 0, 30.431898, 0, 30.466148, 
30.416723), .Dim = c(20L, 2L), .Dimnames = list(NULL, c("longitude", 
"latitude"))) 
    , bbox = structure(c(-91.185814, 0, 0, 30.478041), .Dim = c(2L, 2L), .Dimnames = list(
    c("longitude", "latitude"), c("min", "max"))) 
    , proj4string = new("CRS" 
    , projargs = NA_character_ 
) 
) 

가 주어진 관찰 다각형에 나타납니다 있는지 여부를 확인하기 위해, 나는 시도?

답변

1

다음은 한 가지 방법입니다. 데이터를 보면서 가장 먼저 할 일은 dtSpatial에 투영을 추가하는 것입니다. 그런 다음 각 다각형에 몇 개의 데이터 요소가 있는지 계산하려고합니다. GISTools 패키지에서 poly.counts()을 사용하여이 작업을 수행 할 수 있습니다. 출력은 벡터입니다. 이 함수는 다각형 ID를 사용하여 데이터 요소를 계산하므로 ID를 이름으로 간주합니다. stack()을 사용하여 데이터 프레임으로 변환하려고합니다. br_tracts을 ggplot의 데이터 프레임으로 변환합니다. 마지막으로지도를 그립니다. 나는 geom_cartogram()을 사용했다. 나는이 함수를 두 번 사용하고있다. 먼저 다각형을 그리는 중입니다. 그런 다음 count을 사용하여 색상으로 채 웁니다. 이 작업을 수행하기 위해 map_id와 (과) 일치시킵니다. 참고로 geom_map(), geom_polygon()을 사용할 수 있습니다. coord_map()theme_map()은 선택 사항입니다.

library(tigris) 
library(GISTools) 
library(RColorBrewer) 
library(ggalt) 
library(ggthemes) 

# Add projection to dtSpatial, which is identical to projection of br_tracts 
proj4string(dtSpatial) <- CRS(proj4string(br_tracts)) 

# How many data poiints stay in each polygon. Polygon ID is the name of the vector. 

count <- poly.counts(pts = dtSpatial, polys = br_tracts) 
count <- stack(count) 

mymap <- fortify(br_tracts) 

ggplot() + 
geom_cartogram(data = mymap, aes(x = long, y = lat, map_id = id), 
       map = mymap) + 
geom_cartogram(data = count, aes(fill = values, map_id = ind), 
       map = mymap, color = "black", size = 0.3) + 
scale_fill_gradientn(colours = rev(brewer.pal(10, "Spectral"))) + 
coord_map() + 
theme_map() 

enter image description here