2015-09-15 50 views
1

我試圖創建與ggplot R A區爲中心的羅賓森投影...太平洋爲中心的羅賓森投影與R中ggplot

shape文件轉換爲羅賓遜CRS使用spTransform和經度設置爲150度不起作用,並且fortify出錯。

這樣的:

world_robin <- spTransform(world2, CRS("+proj=robin +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")) 
plot(world_robin, col = "khaki", bg = "azure2") 

而且似乎沒有成爲一種爲ggmap設置投影時以後做的過程中: 即

coord_map("mollweide", orientation=c(90, 0, 150)) 

這似乎成爲最好的,但它不是那裏。

+0

p.s.我正在使用Natural Earth的1:110m shapefile。 –

+0

您可以編輯該問題,而不是將其添加到評論中。 – 9Deuce

回答

2

你需要GDAL/rgdal這個,它是180和150,但你應該能夠外推。 GIS SO FTW!

library(ggplot2) 
library(ggthemes) 
library(sp) 
library(rgdal) 

# assumes you are in the ne_110m... directory 
# split the world and stitch it back together again 

system("ogr2ogr world_part1.shp ne_110m_admin_0_countries.shp -clipsrc -180 -90 0 90") 
system("ogr2ogr world_part2.shp ne_110m_admin_0_countries.shp -clipsrc 0 -90 180 90") 
system('ogr2ogr world_part1_shifted.shp world_part1.shp -dialect sqlite -sql "SELECT ShiftCoords(geometry,360,0), admin FROM world_part1"') 
system("ogr2ogr world_0_360_raw.shp world_part2.shp") 
system("ogr2ogr -update -append world_0_360_raw.shp world_part1_shifted.shp -nln world_0_360_raw") 

world <- readOGR("ne_110m_admin_0_countries/world_0_360_raw.shp", "world_0_360_raw") 
world_robin <- spTransform(world, CRS("+proj=robin +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")) 

world_dat <- fortify(world_robin) 

gg <- ggplot() 
gg <- gg + geom_map(data=world_dat, map=world_dat, 
        aes(x=long, y=lat, map_id=id), 
        fill="khaki", color="black", size=0.25) 
gg <- gg + coord_equal() 
gg <- gg + theme_map() 
gg <- gg + theme(plot.background=element_rect(fill="azure2")) 
gg 

enter image description here

您可以使用gdalUtils此爲好,但它只是調用系統二進制文件,你必須指定與衆所周知的字符串裁剪多邊形(所以system呼叫是幾個字符短爲線)。

僅供參考:這意味着您必須在使用ggplot2進行繪圖之前移動並計劃全部點/形狀。

+0

非常好。非常感謝。 –