2016-09-09 5 views
2

ethnic 변수의 바깥 쪽 경계 만 this data set에 표시하고 싶습니다. 이 링크 아래에있는 plot_data 데이터 세트는 수단에 대한 PRIO GRID의 shapefile에서 강화 된 데이터 세트입니다.ggplot2 map/geom_polygon의 바깥 쪽 테두리 만 플롯

나의 현재 코드는 다음과 같습니다

plot_data <- load("plot_data.rdata") 

ggplot(plot_data, 
     aes(x= long, 
      y = lat, 
      group = id)) + 
    geom_polygon() + 
    geom_polygon(data = plot_data %>% 
       filter(!is.na(ethnic)) %>% # subset data with ethnicity only 
       as.data.frame(), 
       aes(color = ethnic)) + 
    coord_equal() 

이 나에게 다음과 같은 출력 제공 : 그러나

enter image description here

을, 나는의 정착 지역의 모든 내부 라인을 제거 할 것 특정 인종 그룹을 선택하고 그 지역의 바깥 쪽 경계 만 그립니다.

this similar problem의 해결책을 찾지 못했습니다.

전에 앞에 셀을 결합해야 할 수도 있습니다. shapefile을 강화합니다. 어쩌면 요새화 된 방법이있을 수 있습니다. 중복 된 좌표를 제거하려고 시도했지만 작동하지 않았습니다. 어떤 제안이라도 대단히 감사하겠습니다. 감사.

답변

2

기본 아이디어는 간단합니다. 채우기 및 색상을 전체 플롯의 미학에 매핑 한 다음 작은 폴리곤의 미학에 색상을 매핑하면 더 작은 다각형을 같은 색상으로 채울 수 있습니다. 더 큰 다각형의 것. 그것이 작은 폴리곤의 안쪽 선을 제거합니다. 그런 다음 빨간색 선의 너비를 인식 가능한 수준까지 높이기 위해 작은 다각형의 미학 밖의 크기를 추가했습니다.

plot_data <- load("plot_data.rdata") 

library(ggplot2) 

df<-plot_data %>% 
    filter(!is.na(ethnic)) %>% # subset data with ethnicity only 
    as.data.frame()  

ggplot(plot_data, 
     aes(x= long, y = lat, group = id,fill="", color="")) + 
    geom_polygon() + 
    geom_polygon(data = df, 
       aes(color = ethnic), size=1) + 
    geom_polygon(data=df, aes(x= long, y = lat, group = id))+ 
    scale_fill_manual(values="black", guide=F)+ 
    scale_color_manual(name="ethnic", 
       labels=c("","Shaygiyya, Ja'aliyyin and Danagla (Arab)"), 
       values=c("black","red"), 
       breaks = c("NA","Shaygiyya, Ja'aliyyin and Danagla (Arab)")) + 
    coord_equal() 

enter image description here

내 세션 정보 :

sessionInfo() 
R version 3.3.1 (2016-06-21) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 
Running under: OS X 10.11.5 (El Capitan) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.7  XML_3.98-1.4  proj4_1.0-8  bitops_1.0-6  
[5] MASS_7.3-45  grid_3.3.1   plyr_1.8.3   gtable_0.2.0  
[9] scales_0.4.0  KernSmooth_2.23-15 ggplot2_2.1.0  ash_1.0-15   
[13] RColorBrewer_1.1-2 RJSONIO_1.3-0  tools_3.3.1  RSelenium_1.4.2 
[17] munsell_0.4.3  RCurl_1.95-4.8  maps_3.1.0   colorspace_1.2-6 
[21] caTools_1.17.1 

업데이트 : OP 내가 게시 된 코드를 사용하여 동일한 플롯을 생산 괴롭히는 데. 나는 내 친구가 여기에 제공된 것과 동일한 코드를 사용하여 Windows 시스템 (나는 El Capitan에있다)에서 음모를 재현했다. 그리고 그는 같은 결과를 얻었다 (아래).

enter image description here

+0

감사! 그러나 이것은 나를 위해 잘 작동하지 않습니다. 내가 얻는 결과는 http://imgur.com/a/DswP0입니다. 나는 dplyr v0.5 & ggplot2 v2.1.0을 사용하고 있습니다. 어쩌면 코드 뒤에 생각해 보는 과정을 조금이라도 상세히 설명 할 수 있다면 도움이 될 것입니다. – Felix

+0

@Felix, 무엇을 말해야할지 잘 모르겠다. 작업 공간을 지우고 다시 시도해 보시기 바랍니다. 내가 제공 한 데이터를 사용하고 RStudio와 R을 통해 코드를 실행했으며 워크 스테이션과 랩톱 (모두 Mac)에서 실행했습니다 - 모든 것이 잘 작동합니다 ... ggplot2 확장 또는 테마가 사용자 환경에로드되어 있으므로 확인하십시오. 그뿐 아니라. 기본 아이디어는 간단합니다. 채우기와 색상을 전체 플롯의 미학에 매핑 한 다음 작은 폴리곤의 미학에 색상을 매핑하면 더 큰 폴리곤과 동일한 색상으로 작은 폴리곤에 색상을 지정할 수 있습니다 polygon ... –

+0

... 작은 폴리곤의 안쪽 선을 제거하는 것은 무엇입니까. 그런 다음 빨간색 선의 너비를 인식 가능한 수준까지 높이기 위해 작은 다각형의 미학 밖의 크기를 추가했습니다. –

관련 문제