gunakan proj4 untuk menentukan proyeksi Robinson dengan paket R ggmap dan ggplot2?


13

Saya ingin memproyeksikan peta ini dalam proyeksi robinson:

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

masukkan deskripsi gambar di sini

Dan saya ingin mengubah proyeksi menjadi "Robinson" (mengikuti saran dari jawaban atas pertanyaan saya sebelumnya: Proyeksi apa yang digunakan peta wilayah iklim global dari Wikipedia?

Saya kesulitan menemukan implementasi default dari proyeksi ini, saya mengerjakan yang berikut untuk menggunakan proj4perpustakaan:

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

Saya telah mencoba sejumlah pendekatan, termasuk:

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

tapi tidak ada yang berhasil. Apakah ini salah ketik, atau saya melewatkan sesuatu yang mendasar tentang metode ini?

Jawaban:


11

Mungkin sulit untuk menangani Robinson dari dalam ggplot2.

Solusi coAIK_map ggplot2 AFAIK yang Anda jelajahi akan menggunakan informasi proyeksi seperti yang didefinisikan dalam paket mapproject . Ada beberapa yang tersedia di sana tetapi sayangnya Robinson bukan salah satunya dan saya tidak yakin apakah Anda dapat menambahkannya sendiri.

Juga - worlddata yang Anda gunakan (dari paket ggmap saya kira) sudah menjadi kelas bingkai data. Jadi Anda tidak akan dapat memproyeksi ulang dengan mudah (?).

Saran saya akan mulai dari awal menggunakan file bentuk dan menangani data geografis sebelum meneruskannya ke ggplot2. Solusi sepintas saya menggunakan data Natural Earth akan mengikuti langkah-langkah ini:

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 menggunakan informasi tentang proyeksi dari file prj dan ringkasan sekarang memberitahu saya sekarang bahwa dunia sekarang

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]

Dan terlihat seperti itu:

masukkan deskripsi gambar di sini

Mari kita beralih ke 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")  

Ringkasan sekarang:

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]

Dan kelihatannya seperti itu:

masukkan deskripsi gambar di sini

Dari sini Anda harus dapat melanjutkan dengan ggplot (fortifikasi mungkin diperlukan).


7

Anda sekarang dapat melakukan ini secara langsung dengan ggaltpaket:

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

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.