1. 데이터 셋 찾기
data.seoul.go.kr/dataList/OA-16095/S/1/datasetView.do
서울특별시 휴게음식점 인허가 정보
2. R 스튜디오를 사용해 서울시 지도 불러오기
1) 필요한 라이브러리 불러오기
library(ggmap)
library(ggplot2)
library(raster)
library(rgeos)
library(maptools)
library(rgdal)
2) 지리정보 데이터 셋 불러오기
www.gisdeveloper.co.kr/?p=2332 여기서 시군구 2017년 3월 업데이트 파일을 다운로드한다.
(1) 시각화하고 싶은 데이터와 지리정보 데이터를 R스튜디오로 불러오기
P <- read.csv("C:/sample.csv", header = TRUE) #시각화할 데이터셋
map <- shapefile("C:/SIG_201703/TL_SCCO_SIG.shp") #지리 정보 데이터셋
(2) 지리정보 데이터를 몇가지 단계를 거쳐 변환시키기
map <- spTransform(map, CRSobj = CRS('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'))
new_map <- fortify(map, region = 'SIG_CD')
new_map$id <- as.numeric(new_map$id)
seoul_map <- new_map[new_map$id <= 11740,]
(3) 시각화하고 싶은 데이터와 지리정보 데이터를 합치기
P_merge <- merge(seoul_map, P, by='id')
(4) 구별 경계 그리기
ggplot() + geom_polygon(data = P_merge, aes(x=long, y=lat, group=group), fill = 'white', color='black')
(5) 자신이 시각화하고 싶은 컬럼명을 fill 속성에 넣어주어서 구별로 값에 따라 진하기가 달라지는 지도 그리기
ggplot() + geom_polygon(data = P_merge, aes(x=long, y=lat, group=group, fill = 자신이 시각화하고 싶은 컬럼명))
(6) 타이틀 넣기
plot <- ggplot() + geom_polygon(data = P_merge, aes(x=long, y=lat, group=group, fill = A))
plot + scale_fill_gradient(low = "#ffe5e5", high = "#ff3232", space = "Lab", guide = "colourbar")
+ theme_bw() + labs(title = "서울시 A 분포")
+ theme(panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), plot.title = element_text(face = "bold", size = 18, hjust = 0.5))

++ 지도 안에 자치구 별 이름과 수치 넣기
plot + scale_fill_gradient(low = "#E5FFEB", high = "#138535", space = "Lab", guide = "colourbar")
+ theme_bw() + labs(title = "서울시 카페 분포")
+ theme(panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), plot.title = element_text(face = "bold", size = 18, hjust = 0.5))
+geom_text(data = gu_name, aes(x=long, y=lat, label=paste(gu_name,coffee, sep = "\n")))

++ 수치에 따라 원의 크기를 다르게 해서 지도 위에 표시 (geom.point 사용)
1) 원의 색깔이 너무 알록달록해짐
추가한 코드+ geom_point(data=gu_name, aes(x=long, y=lat, size=coffee, color=as.character(coffee))) + scale_size_continuous(name="coffee" , range = c(1,20))
plot + scale_fill_gradient(low = "#E5FFEB", high = "#138535", space = "Lab", guide = "colourbar")
+ theme_bw() + labs(title = "서울시 카페 분포")
+ theme(panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), plot.title = element_text(face = "bold", size = 18, hjust = 0.5))
+ geom_point(data=gu_name, aes(x=long, y=lat, size=coffee, color=as.character(coffee))) + scale_size_continuous(name="coffee" , range = c(1,20))
+geom_text(data = gu_name, aes(x=long, y=lat, label=paste(gu_name,coffee, sep = "\n")))

2) 원의 색을 통일
변경한 코드
+ geom_point(data=gu_name, aes(x=long, y=lat, size=coffee), color='yellow') + scale_size_continuous(name="coffee" , range = c(1,20))
plot + scale_fill_gradient(low = "#E5FFEB", high = "#138535", space = "Lab", guide = "colourbar")
+ theme_bw() + labs(title = "서울시 카페 분포")
+ theme(panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), plot.title = element_text(face = "bold", size = 18, hjust = 0.5))
+ geom_point(data=gu_name, aes(x=long, y=lat, size=coffee), color='yellow') + scale_size_continuous(name="coffee" , range = c(1,20))
+geom_text(data = gu_name, aes(x=long, y=lat, label=paste(gu_name,coffee, sep = "\n")))

출처
givitallugot.github.io/articles/2020-03/R-visualization-1-seoulmap
[R/RStudio] R을 이용한 서울시 지도 시각화 with ggplot2 ggmap raster rgeos maptools rgdal packages | Clue's Blog
지리 정보를 시각화할 때 QGIS 등의 툴을 사용할 수도 있으나 rough한 시도별 또는 구별 수치 시각화는 R과 R Studio를 이용해서 어렵지 않게 그려볼 수 있습니다. 이러한 그래프는 시도별 또는 구별
givitallugot.github.io
댓글 영역