본문 바로가기
R

ggmap을 이용한 지도 시각화

by 슬통이 2022. 1. 1.
반응형

오늘은 ggmap을 이용한 데이터의 정보를 지도에 시각화하는 방법을 알아보도록 하겠습니다. 최종 결과물은 아래에 보이는 것처럼 유럽지역의 특정 국가 위치에 빨간색 투명점을 나라별 GDP에 따라 크기를 다르게 찍어보도록 하겠습니다!

 

구글맵 API를 발급 받아 ggmap에 연결시킵니다. 구글맵 API를 발급받기 위해서 구글맵 개발자 페이지에 방문합니다.

구글맵 API 발급받기

https://mapsplatform.google.com/

 

Google Maps Platform - Location and Mapping Solutions

Create real world and real time experiences for your customers with dynamic maps, routes & places APIs from Google Maps Platform’s location solutions.

mapsplatform.google.com

구글맵 API를 받기 위해서는 자신의 신용카드 정보를 등록해야합니다. 실제 개인이 사용할 때는 무료로 사용이 가능합니다만, API 자체를 발급받기 위해서 신용카드 등록은 필수입니다. 화면에 나오는 정보들을 차근차근 채우고 API를 발급받아 주세요! 자세한 내용은 영상을 따라가면서 하시기 바랍니다.

첨부파일 및 R 코드 공유

영상에 사용된 데이터프레임의 정보가 담겨있는 첨부파일을 먼저 내려받도록 하겠습니다!

ggmap.csv
0.00MB

위의 ggmap.csv 파일을 다운 받은 후, 아래의 R코드를 사용해서 따라와주세요~!

library(tidyverse)
library(ggmap)
register_google(key = "API키를 입력해주세요")

plot_data <- read_csv("ggmap.csv")
bgdata <- data.frame(x = plot_data$longitude,
                     y = plot_data$latitude)

center <- colMeans(bgdata)

country_loc <- tibble(lon = bgdata$x, 
                     lat = bgdata$y)

mapdata <- get_googlemap(
    center = center,
    zoom = 4,
    scale = 2,
    size = c(640, 640),
    # marker = country_loc,
    maptype = "roadmap")


p <- ggmap(mapdata) + 
    geom_point(data = plot_data,
        aes(longitude, latitude), 
            col = "red", size = plot_data$gdp/150,
        alpha = 0.5) + 
    scale_y_continuous(limits = c(35, 58), expand = c(0, 0)) +
    theme(axis.text  = element_blank(),
        axis.title   = element_text(size = 15, face="bold"),
        plot.margin  = margin(0.2, 0.2, 0.2, 0.2, "cm"),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank())
p


geo_code <- geocode(plot_data$name)
geo_code

p <- ggmap(mapdata) + 
    geom_point(data = geo_code,
               aes(lon, lat), 
               col = "red", size = plot_data$gdp/150,
               alpha = 0.5) + 
    scale_y_continuous(limits = c(35, 58), expand = c(0, 0)) +
    theme(axis.text  = element_blank(),
          axis.title   = element_text(size = 15, face="bold"),
          plot.margin  = margin(0.2, 0.2, 0.2, 0.2, "cm"),
          axis.ticks.x = element_blank(),
          axis.ticks.y = element_blank())
p
반응형

댓글