R ggmap ve ggplot2 paketleriyle Robinson projeksiyonunu belirtmek için proj4'ü kullanın?


13

Robinson projeksiyonunda bu haritayı yansıtmak istiyorum:

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

resim açıklamasını buraya girin

Projeksiyonu "Robinson" olarak değiştirmek istiyorum (önceki sorumun cevabından tavsiye alındıktan sonra: Wikipedia'nın küresel iklim bölgesi haritası hangi projeksiyonu kullanıyor?

Bu projeksiyonun varsayılan bir uygulamasını bulmakta zorlandım, proj4kütüphaneyi kullanmak için aşağıdakileri yaptım :

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

Ben dahil olmak üzere bir dizi yaklaşım denedim:

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

ama bunların hiçbiri işe yaramıyor. Bir yazım hatası mı yoksa bu yöntemle ilgili temel bir şey mi eksik?

Yanıtlar:


11

Robinson'ı ggplot2 içinden ele almak zor olabilir.

Keşfettiğiniz AFAIK ggplot2 coord_map çözümü, projeksiyon bilgilerini mapproject paketinde tanımlandığı şekilde kullanacaktır . Orada az var ama ne yazık ki Robinson onlardan biri değil ve kendi ekleyebilirsiniz eğer emin değilim.

Ayrıca - kullandığınız worldveriler (sanırım ggmap paketinden) zaten bir veri çerçevesi sınıfıdır. Böylece kolayca yeniden üretemeyeceksiniz (?).

Benim önerim şekil dosyasını kullanarak sıfırdan başlamak ve coğrafi verileri ggplot2'ye geçirmeden önce işlemek olacaktır. Natural Earth verilerini kullanan üstünkörü benim çözümüm şu adımları izler:

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 dosyasından projeksiyon hakkında bilgi kullanır ve özet şimdi bana şimdi dünyanın şimdi olduğunu söylüyor

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]

Ve şöyle görünüyor:

resim açıklamasını buraya girin

Robinson'a dönüşelim:

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

Özet şimdi:

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]

Ve şöyle görünüyor:

resim açıklamasını buraya girin

Buradan ggplot ile devam edebilmelisiniz (takviye gerekebilir).


7

Şimdi bunu doğrudan ggaltpaketle yapabilirsiniz:

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

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.