2016-07-22 5 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으로 표시해야합니다. 어느 쪽을 선택 하는가는 선호하는 방식입니다.

(I이이 Azimuthal equidistant projection 생각) azequidistant를 사용하여 수동으로 레이블을 추가 :

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/census-recensement/2011/geo/bound-limit/files-fichiers/gpr_000b11a_e.zip. 그래도 오류가 발생합니까? 축에 대해서는 기하학 텍스트를 사용하여 수동으로 추가해야하는 것처럼 보입니다. 나중에 업데이트 할 예정입니다. – Chris

+0

안녕하세요, 이유를 모르겠지만 셰이프 파일을 사용하면 작동합니다. 어쩌면 이전에 사용했던 shapefile의 투영 방법이 Albers Equal Area 인''aea ''이기 때문일 수도 있습니다. –

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()가 아닌 (list 또는 벡터) 유형 'S4' ' –

+0

이외에도 코드가 전 세계에 걸쳐 계수 선을 생성하지만 캐나다를 가리 키기 위해 계수 선만 필요합니다. 고마워. –

관련 문제