使用proj4用R ggmap和ggplot2包指定Robinson投影?


13

我想在罗宾逊投影中投影这张地图:

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

在此处输入图片说明

并且我想将投影更改为“罗宾逊”(在回答我以前的问题的建议之后: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)

但这些都不起作用。是错字,还是我缺少有关此方法的基本知识?

Answers:


11

从ggplot2中处理Robinson可能很棘手。

您探索的AFAIK ggplot2 coord_map解决方案将使用mapproject包中定义的投影信息。那里可用的资源很少,但不幸的是罗宾逊不是其中之一,我不确定您是否可以添加自己的资源。

另外- 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(可能需要加强)。


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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.