usare proj4 per specificare la proiezione Robinson con i pacchetti R ggmap e ggplot2?


13

Voglio proiettare questa mappa nella proiezione robinson:

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

inserisci qui la descrizione dell'immagine

E vorrei cambiare la proiezione in "Robinson" (seguendo i consigli della risposta alla mia domanda precedente: quale proiezione usa la mappa della regione climatica globale da Wikipedia?

Ho avuto difficoltà a trovare un'implementazione predefinita di questa proiezione, ho elaborato quanto segue per l'utilizzo della proj4libreria:

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")

Ho provato una serie di approcci, tra cui:

# 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)

ma nessuno di questi funziona. È un errore di battitura o mi manca qualcosa di fondamentale in questo metodo?

Risposte:


11

Potrebbe essere difficile gestire Robinson da ggplot2.

La soluzione coord_map ggplot2 di AFAIK che hai esplorato utilizzerà le informazioni di proiezione come definito nel pacchetto mapproject . Ci sono pochi disponibili lì, ma sfortunatamente Robinson non è uno di questi e non sono sicuro che tu possa aggiungerne uno tuo.

Inoltre - i worlddati che stai utilizzando (dal pacchetto ggmap presumo) sono già una classe di frame di dati. Quindi non sarai in grado di riproiettarlo facilmente (?).

Il mio suggerimento sarebbe di ricominciare da capo usando il file shape e gestire i dati geografici prima di passarli a ggplot2. La mia soluzione rapida usando i dati di Natural Earth seguirà questi passaggi:

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 utilizza le informazioni sulla proiezione dal file prj e il riepilogo ora mi dice ora che il mondo è ora

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]

E si presenta così:

inserisci qui la descrizione dell'immagine

Trasformiamoci in Robinson:

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")  

Il riepilogo è ora:

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]

E sembra che:

inserisci qui la descrizione dell'immagine

Da qui dovresti essere in grado di continuare con ggplot (potrebbe essere necessario fortificare).


7

Ora puoi farlo direttamente con il ggaltpacchetto:

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

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.