R | plotly | Interactive Map(1) - 지도 시각화(점, 밀도)

2023. 2. 7. 13:04·R/plotly

 

 

이전 ggmap을 사용한 지도 시각화에서는

ggplot2 패키지와 ggmap 패키지를 사용해 scatter와 density를 지도 위에 시각화하였다. 

이번 포스팅에서는 plotly 패키지를 사용하여 지도 시각화를 진행해 볼 것이다. 

 

https://boring9.tistory.com/20

 

R | ggmap | 지도 시각화(1)

R에서는 지도 시각화를 위한 'ggmap' 패키지를 제공한다. Google map에서 지도 그림을 가져와 조각조각 붙인다. 이를 위해서는 위도, 경도 좌표값이 꼭 필요하다. 참고로 예전에는 구글맵 api를 등록하

boring9.tistory.com

plotly_map1_scatter_density.html
5.09MB


 

00. 패키지 로드 

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

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

 

 


 

01. 간단한 지도 불러오기 

 

·OpenStreetMap 사용 

·대전광역시의 지도 시각화 하기 

 

· mapbox style(Token이 필요하지 않음)

   : open-street-map, carto-positron, carto-darkmatter, stamen-terrain, stamen-toner or stamen-watercolor

 

1) Open-street-map

 

- plot_ly() 함수로 지도를 시각화 하기 위해서는 type 속성에 'scattermapbox'나 다른 지도 type을 지정해 준 후,

   layout의 mapbox 속성을 사용해 style = 'open-street-map', 

   center 속성을 사용해 지도로 표현하고 싶은 위치의 중심좌표를 매핑한다.

   zoom을 사용해서 지도를 확대, 축소할 수 있다. 

plot_ly(type = 'scattermapbox') %>% 
   layout(mapbox=list(style='open-street-map',
                      center=list(lat=36.36, lon=127.38),
                      zoom=10))

 

 

 2) carto-positron

 

- style = 'carto-position'

plot_ly(type='scattermapbox') %>% 
   layout(mapbox=list(style='carto-positron',
                      center=list(lat=36.36, lon=127.38),
                      zoom=10))

 

 

 

3)  stamen-terrain

 

- style = 'stamen-terrain'

plot_ly(type='scattermapbox') %>% 
   layout(mapbox=list(style='stamen-terrain',
                      center=list(lat=36.36, lon=127.38),
                      zoom=10))

 

 

 


 

02. 공공데이터를 활용한 지도 시각화 

 

1)  소상공인시장진흥공단_상가(상권)정보

 

: 영업 중인 전국 상가업소 데이터를 제공
(상호명, 업종코드, 업종명, 지번주소, 도로명주소, 경도, 위도 등)

https://www.data.go.kr/data/15083033/fileData.do

 

소상공인시장진흥공단_상가(상권)정보_20220930

<br/>영업 중인 전국 상가업소 데이터를 제공합니다. <br/>(상호명, 업종코드, 업종명, 지번주소, 도로명주소, 경도, 위도 등)

www.data.go.kr

 

2) 파일 불러오기 및 데이터 추출 

 

소상공인시장진흥공단_상가(상권) 정보_대전_202209.csv 파일 사용 

data.file <- read.csv(file.choose(), fileEncoding = "utf-8")
data.raw<- data.file
data.raw %>% head()
data.raw %>% summary()
data.raw %>% dim()
data.raw %>% str()

data.raw %>% select(상호명, 상권업종대분류명,도로명주소, 경도, 위도)

 

 

- 자료 추출 : 상권업종소분류명=='커피전문점/카페/다방'인 행만 추출

data.cafe <- data.raw %>% filter(상권업종소분류명=='커피전문점/카페/다방')
data.cafe %>% head()

 

 

 

3)  카페 위치를 지도 위에 점(scattermapbox)으로 표시 

 

· 지도 위에 위치를 점으로 표시하기 위해서는 위경도가 있는 데이터를 매핑한 후,

   lat에 위도 정보가 있는 열을 매핑, lon에 경도 정도가 있는 열을 매핑하고, 

   mode = "markers", type = "scattermapbox"로  지정하면 된다. 

 

## open-street-map 맵 사용
plot_ly(data.cafe, lat=~위도, lon=~경도) %>% 
  add_trace(split=~시군구명,
            mode='markers', 
            type= "scattermapbox",
            hoverinfo = 'name+text',
            hovertext=~상호명) %>% 
  layout(mapbox=list(style='open-street-map',
                     center=list(lat=36.36, lon=127.38),
                     zoom=10))

 

 

 

4)  카페 분포를 지도 위에 밀도(densitymapbox)로 표현

 

- 지도 위에 밀도를 표현하기 위해서는 type = 'densitymapbox'로 지정해 주면 된다. 

plot_ly(data.cafe, lat=~위도, lon=~경도) %>% 
  add_trace(type= "densitymapbox") %>% 
  layout(mapbox=list(style='open-street-map',
                     center=list(lat=36.36, lon=127.38),
                     zoom=10))

 

 

 

-  radius가 기본값이 30이므로 위의 그래프처럼 카페 위경도 중심으로 반경이 넓게 표현된다. 따라서 더 정확한 밀도를 보기 위해서는

    radius를 적절히 조절해야 한다.

 

- 또한, 축의 색상을 변경하기 위해서는 coloraxis = "coloraxis"를 지정하고, layout에서 colorscale를 지정하면 된다. 

plot_ly(data.cafe, lat=~위도, lon=~경도) %>% 
  add_trace(
            type= "densitymapbox",
            coloraxis = "coloraxis", # 축 색깔 설정,
            radius = 10, # 밀도로 표현할 반경 지정
            opacity = 0.5) %>% 
  layout(mapbox=list(style='open-street-map',
                     center=list(lat=36.36, lon=127.38),
                     zoom=10),
         coloraxis = list(colorscale = 'Viridis')) # 축 색깔 팔레트 지정

 

 

 

 

 

 

 

 

 

 

 

 

 


참고 문헌(reference)

더보기

참고 사이트

https://plotly.com/r/scatter-plots-on-maps/

 

Scatter

Detailed examples of Scatter Plots on Maps including changing color, size, log axes, and more in R.

plotly.com

https://plotly.com/r/reference/scattermapbox/

 

Scattermapbox

Figure

plotly.com

https://plotly.com/r/mapbox-density-heatmaps/

 

Mapbox

Detailed examples of Mapbox Density including changing color, size, log axes, and more in R.

plotly.com

 

'R > plotly' 카테고리의 다른 글

R | plotly | Interactive Map(3) - 지도 시각화(폴리곤)  (0) 2023.02.08
R | plotly | Interactive Map(2) - 지도 시각화(선)  (0) 2023.02.07
R | plotly | Histogram - 히스토그램  (0) 2023.02.03
R | plotly | Pie chart - 원 그래프  (0) 2023.02.03
R | plotly | Line Plot - 선 그래프  (1) 2023.02.02
'R/plotly' 카테고리의 다른 글
  • R | plotly | Interactive Map(3) - 지도 시각화(폴리곤)
  • R | plotly | Interactive Map(2) - 지도 시각화(선)
  • R | plotly | Histogram - 히스토그램
  • R | plotly | Pie chart - 원 그래프
갬보리
갬보리
제발 코드정리좀 하자 (R, SQL, SAS, Python , etc...)
  • 갬보리
    보딩코
    갬보리
  • 전체
    오늘
    어제
    • 분류 전체보기 (49)
      • R (32)
        • dplyr (7)
        • preprocessing (2)
        • EDA (0)
        • ggplot2 (10)
        • plotly (11)
        • leaflet (2)
      • SQL (15)
      • SAS (0)
      • Python (1)
        • preprocessing (0)
        • ML (0)
        • Library (0)
      • ETC (1)
  • hELLO· Designed By정상우.v4.10.3
갬보리
R | plotly | Interactive Map(1) - 지도 시각화(점, 밀도)
상단으로

티스토리툴바