2016-07-22 70 views
4

我現在正在使用ggplot2繪製加拿大的地圖。由於默認投影方法是「aea」(Albers Equal Area),所以經度和緯度在地圖上是直線。我想知道如何在地圖上以「110W,100W,90W」和「50N,60N,70N」的形式顯示經緯度。他們應該是曲線。非常感謝。如何使用ggplot2在地圖上添加經線和緯度線?

在ArcGIS shapfile從https://www.arcgis.com/home/item.html?id=dcbcdf86939548af81efbd2d732336db enter image description here

library(ggplot2) 
library(rgdal) 
countries<-readOGR("Canada.shp", layer="Canada") 
ggplot()+geom_polygon(data=countries,aes(x=long,y=lat,group=group),fill='white',color = "black") 

最終的結果下載應該是這樣的。 enter image description here

+1

也許看[刻度包(https://cran.r-project.org /web/packages/graticule/index.html),([vignette here](https://cran.r-project.org/web/packages/graticule/vignettes/graticule.html))。 –

+0

謝謝。您提供的網站很有用,但它不適用於'ggplot2'。 –

回答

4

爲此,您可以用ggplot documented here

coord_map參數,這種使用投影來改變座標網格。曲線將包括等距投影,但您應該查看here以獲取允許的所有投影列表。你選擇哪一個是一種偏好。

使用azequidistant(我認爲這是Azimuthal equidistant projection),以及手動添加的標籤:

axis_labels <- rbind(
        data.frame(long = rep(-140,5),lat = seq(40,80,10), labels = seq(40,80,10)), # x axis labels 
        data.frame(long = seq(-140,-60,40),lat = rep(85,3), labels = seq(140,60,-40)) # y axis labels 
) 

    ggplot() + 
    geom_polygon(data=countries,aes(x=long,y=lat,group=group),fill='white',color = "black") + 
    coord_map("azequidistant") + 
    scale_x_continuous(breaks = seq(-140,60, by = 20))+ 
    scale_y_continuous(breaks = seq(40,80, by = 10)) + 
    geom_text(data = axis_labels, aes(x = long, y = lat, label = labels)) + 
    theme_bw() + 
    theme(panel.grid.major = element_line(colour = "grey"), 
     panel.border = element_blank(), 
     axis.text = element_blank()) 

enter image description here

+0

謝謝您的回覆。但是,當我嘗試運行你的代碼時,會發生錯誤'Data.frame中的錯誤(x = x.range [1],y = y.major):參數意味着行數不同:1,0。你知道如何解決這個問題嗎?我正在使用R版本3.3.1。同時,如您所見,軸刻度標籤不在正確的位置,即它們不靠近座標網格。有沒有解決方案?非常感謝。 –

+0

@YangYang嘗試使用此shapefile:http://www5.statcan.gc.ca/access_acces/alternative_alternatif.action?l=eng&dispext=zip&teng=gpr_000b11a_e.zip&k=%20%20%20%2040968&loc=http://www12 .statcan.gc.ca /人口普查recensement/2011 /地理/必然會限制/文件 - fichiers/gpr_000b11a_e.zip。這是否仍然會導致錯誤?對於軸看起來好像需要使用幾何文本手動添加。我會稍後更新 – Chris

+0

嗨,我不知道爲什麼,但它使用您給我的shapefile。也許是因爲我之前使用的shapefile的投影方法是'「aea」',這是Albers Equal Area。 –

0

您可以使用空間數據的單獨刻度圖層,然後根據您的加拿大圖層進行投影。

您可以在NaturalEarthData下載免費的經緯網圖層供下載。

countries<-readOGR("Canada.shp", layer="Canada") 
grat <- readOGR("graticule.shp", layer="graticule") 

grat_prj <- spTransform(grat, CRS(countries)) 

ggplot() + 
geom_polygon(data=countries, aes(x=long,y=lat,group=group),fill='white',color = "black") + 
geom_path(data=grat_prj, aes(long, lat, group=group, fill=NULL), linetype="solid", color="grey50") 
+0

謝謝你的回覆。但是有一個錯誤:CRS(國家)中的錯誤:沒有將此S4類強制到一個向量的方法 另外:警告消息: 在is.na(projargs)中:is.na()應用於non-或向量)'S4'' –

+0

此外,您的代碼將產生整個世界的格線,但我只需要格線覆蓋加拿大。非常感謝。 –

相關問題