새소식

R/plotly

R | plotly | Interactive Map(3) - 지도 시각화(폴리곤)

  • -

 

저번  Interactive Map(2)에서는 plotly 패키지의 scattermapbox trace를 사용하여 

차량 궤적 데이터와, 항공노선을 지도 위에 그려보았다. 

https://boring9.tistory.com/34

 

R | plotly | Interactive Map(2) - 지도 시각화(선)

저번 Interactive Map(1)에서는 plotly 패키지를 사용하여 대전광역시 상권정보를 scattermapbox trace를 사용해 위치를 점으로 표현하고, 상권 밀집 정도를 densitymapbox trace를 사용해 밀도로 표현하였다. https

boring9.tistory.com

 

이번 포스팅에서는 plotly 패키지를 사용해

시도 shape file과 , 행정구역_시도별 인구수 데이터를 활용해  지도 위에 그려볼 것이다. 

 

 


 

 

00. 패키지 로드 

 

## 패키지 로드 
library(dplyr)
library(plotly)

### 한글 폰트 설정 
library(showtext)
font_add_google("Nanum Gothic", "nanumgothic")

 


01. 데이터 불러오기 및 전처리 

 

1)  shape 파일 불러오기: 시도

 

http://www.gisdeveloper.co.kr/?p=2332 

 

대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer

 

www.gisdeveloper.co.kr

· shape 파일의 용량이 크기 때문에 지도를 그리는 데 많은 시간이 소요되므로,

   https://ldgeao99-developer.tistory.com/559 를 참고하여 shape 파일을 단순화해서 파일 용량을 줄였다.

 

4. 경계면을 나누는 도형을 단순화해서 파일용량 낮추기

1. 먼저 아래의 링크로 접속해준다. https://mapshaper.org/ mapshaper Drop or paste files here or select from a folder Shapefile, GeoJSON, TopoJSON, DBF and CSV files are supported Files can be loose or in a zip archive Quick import Drop or paste

ldgeao99-developer.tistory.com

· plotly에서는 shp 파일을 data.frame으로 읽어와야 하기 때문에 'sf' 패키지의 st_read() 함수를 사용한다.

shp.file <- file.choose()
shp.df <- sf::st_read(shp.file, quiet=T, options="ENCODING=CP949")
shp.df %>% head()  # geometry에 지역정보가 들어 있음
shp.df %>% str()
shp.df %>% class()

 

 

 

2) KOSIS에서 제공하는 행정구역(시군구) 별, 성별 인구수 데이터

 

data.pop <- read.csv(file.choose())
data.pop

 

 

3)  데이터 결합 

 

· 시도 shp파일과 인구수 데이터를 dplyr 패키지의 left_join() 함수를 사용하여 결합해 준다. 

shp.df.use <- left_join(shp.df, data.pop, by="CTP_KOR_NM")
shp.df.use %>% head()

 

 

 


 

02. 지도 시각화 (polygon) 

 

1) 시도별(범주형) 지도 시각화 

 

- 기본 plot_ly 함수로 간단하게 시도별 지도를 그릴 수 있다.

  이때 split 속성에 CTP_KOR_NM 시도명 변수만 지정하면 된다. 

plot_ly(shp.df.use, split=~CTP_KOR_NM) %>% 
  
  layout(title = "시도별 지도",
         font=list(family ='nanumgothic'),
         margin = list(l=10, r=20, b=10, t=30, pad=0))

 

 

2) 시도별 인구수(연속형 변수) 지도 시각화

 

- 시도별 인구수에 따라 색을 지정할 수 있다. 

plot_ly(shp.df.use, split=~CTP_KOR_NM,
        color = ~Total) %>% 
  
  layout(title = "시도별 인구수",
         font=list(family ='nanumgothic'),
         margin = list(l=10, r=20, b=10, t=30, pad=0)) %>% 
  colorbar(title = "인구수", x = 0, 
           exponentformat='none')

 

 

 

 

 

 

 

 


참고 문헌(reference)

 

Contents