ใช้ proj4 เพื่อระบุ Robinson projection ด้วยแพ็คเกจ R ggmap และ ggplot2 หรือไม่?


13

ฉันต้องการฉายแผนที่นี้ในการฉายภาพของ Robinson:

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

อาจเป็นเรื่องยากที่จะจัดการกับ Robinson จากภายใน ggplot2

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

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.