이전 ggmap을 사용한 지도 시각화에서는
ggplot2 패키지와 ggmap 패키지를 사용해 scatter와 density를 지도 위에 시각화하였다.
이번 포스팅에서는 plotly 패키지를 사용하여 지도 시각화를 진행해 볼 것이다.
https://boring9.tistory.com/20
R | ggmap | 지도 시각화(1)
R에서는 지도 시각화를 위한 'ggmap' 패키지를 제공한다. Google map에서 지도 그림을 가져와 조각조각 붙인다. 이를 위해서는 위도, 경도 좌표값이 꼭 필요하다. 참고로 예전에는 구글맵 api를 등록하
boring9.tistory.com
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 |