proj4를 사용하여 R ggmap 및 ggplot2 패키지로 Robinson 투영법을 지정합니까?


13

이지도를 로빈슨 투영법으로 투영하고 싶습니다.

library(ggmap)
world <- map_data("world")
ggplot() + geom_path(data = world, 
                              aes(long, lat, group = group))

여기에 이미지 설명을 입력하십시오

프로젝션을 "로빈슨 (Robinson)"으로 변경하고 싶습니다 (이전 질문에 대한 답변의 조언에 따름 : Wikipedia의 지구 기후 지역지도는 어떤 프로젝션을 사용합니까?

이 투영의 기본 구현을 찾는 데 어려움을 겪고 proj4라이브러리 를 사용하기 위해 다음을 수행했습니다 .

library(proj4)
robinson <- project(cbind(world$long, world$lat), 
                    proj = "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

나는 다음을 포함한 여러 가지 접근법을 시도했다.

# using ggmap::get.map()
get_map("world", projection = mapprojection(robinson))
# using ggplot2::coord_map
coord_map(projection = robinson)
# and sp::coordinates:
library(sp)
coordinates(world) <- ~ lat + long
gridded(world) <- TRUE # returns error
proj4string(world) <- CRS(robinson)

그러나 이들 중 어느 것도 작동하지 않습니다. 오타입니까, 아니면이 방법에 대한 기본 사항이 누락 되었습니까?

답변:


11

ggplot2 내에서 Robinson을 다루기가 까다로울 수 있습니다.

탐색 한 AFAIK ggplot2 coord_map 솔루션은 mapproject 패키지에 정의 된대로 투영 정보를 사용 합니다. 거기에 사용 가능한 것이 거의 없지만 불행히도 Robinson은 그중 하나가 아니며 자신을 추가 할 수 있는지 확실하지 않습니다.

또한-사용중인 world데이터 (ggmap 패키지에서 추정)는 이미 데이터 프레임 클래스입니다. 따라서 쉽게 재 투영 할 수 없습니다 (?).

내 제안은 모양 파일을 사용하여 처음부터 시작하고 ggplot2에 전달하기 전에 지리적 데이터를 처리합니다. Natural Earth 데이터를 사용하는 커서 솔루션 은 다음 단계를 따릅니다.

library(ggplot2)
library(grid)

# get data
download.file(url="http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip", "ne_110m_admin_0_countries.zip", "auto")
unzip("ne_110m_admin_0_countries.zip")
file.remove("ne_110m_admin_0_countries.zip")

# read shape file using rgdal library
library(rgdal)
ogrInfo(".", "ne_110m_admin_0_countries")
world <- readOGR(".", "ne_110m_admin_0_countries")
summary(world)  
plot(world, col = "grey")  

readOGR prj 파일의 투영에 대한 정보를 사용하고 요약하면 이제 세상이 지금

Object of class SpatialPolygonsDataFrame
Coordinates:
   min       max
x -180 180.00000
y  -90  83.64513
Is projected: FALSE 
proj4string :
[+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0]

그리고 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

로빈슨으로 변신하자 :

worldRobinson <- spTransform(world, CRS("+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"))
summary(worldRobinson)  
plot(worldRobinson, col = "grey")  

요약은 지금 :

Object of class SpatialPolygonsDataFrame
Coordinates:
        min      max
x -16810131 16810131
y  -8625154  8343004
Is projected: TRUE 
proj4string :
[+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs +towgs84=0,0,0]

그리고 그것은 다음과 같습니다 :

여기에 이미지 설명을 입력하십시오

여기에서 ggplot을 계속할 수 있어야합니다 (fortify가 필요할 수 있음).


7

이제 ggalt패키지를 사용 하여이 작업을 직접 수행 할 수 있습니다 .

library(ggplot2)
library(ggalt)
library(ggthemes)

wrld <- map_data("world")

gg <- ggplot()
gg <- gg + geom_map(data=wrld, map=wrld,
                    aes(x=long, y=lat, map_id=region),
                    color="#2b2b2b", size=0.15, fill=NA)
gg <- gg + coord_proj("+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
gg <- gg + theme_map()
gg

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.