2016-10-12 2 views
0

각 국가의 색상이 데이터 프레임의 변수 값에 의존하는 세계지도를 플롯하려고합니다.ggplot2 및 geom_map으로 코드화 된 세계지도

> affiliation 
# A tibble: 252 × 2 
       region value 
        <chr> <dbl> 
1     Aruba  0 
2   Afghanistan  0 
3    Angola  0 
4    Anguilla  0 
5    Albania  0 
6    Finland  1 
7    Andorra  0 
8 United Arab Emirates  0 
9    Argentina  2 
10    Armenia  0 
# ... with 242 more rows 

코드는 내가 잘 작동이 있습니다

library(ggplot2) 
library(ggthemes) 

ggplot(affiliation, aes(map_id = region)) + 
    geom_map(aes(fill = value), map = worldMap, color='grey', size=0.3) + 
    expand_limits(x = worldMap$long, y = worldMap$lat) + 
    theme_few()+ 
    theme(legend.position = "bottom", 
     axis.ticks = element_blank(), 
     axis.title = element_blank(), 
     axis.text = element_blank()) + 
    scale_fill_gradient(low="white", high="darkblue", name="Number of Affiliates") + 
    guides(fill = guide_colorbar(barwidth = 10, barheight = .5)) 

내 문제는 대부분의 값이 20 ~ 30 만 1 이상치 국가에서 거의 값은 0, 1 또는 2 한 점이다 값은 330으로 표시됩니다. 이렇게하면 국가가 색이 짙게 표시되고 값이 훨씬 낮은 모든 국가는 흰색으로 표시되므로 색조가 쓸모 없게됩니다.

geom_map(aes(fill = value),…geom_map(aes(fill = log(value)),…으로 바꾸려고했지만이 경우 범례의 눈금이 0에서 5+ (0-330 대신)로 표시됩니다.

세계지도에서 더 잘 보이게하기 위해 값이 낮은 많은 국가의 채도를 더 잘 제어하려면 어떻게해야합니까? 감사합니다.

답변

2

ggplot2의 연속 scale 기능의 대부분은 미적에 사용하는 변환을 지정하는 trans 인수를 받아 들인다. 그러면 변환 및 레이블 지정이 자동으로 처리됩니다.

예에서 scale_gradient_n에 대한 인수에 (데이터에 숫자가 0이므로 "log"뿐 아니라)을 추가하는 것이 좋습니다.

+0

앞으로 큰 걸음. 고맙습니다. 범례를 수정하여 1에서 5까지의 0에서 330까지의 범위를 표시하려면 어떻게해야합니까? – Sal

+0

'breaks' 인수를 사용할 수 있습니다. 따라서 @jdobres의 답변 : 'scale_fill_gradientn (name = "Affiliates 수", trans ='log1p ', colors = c ('# ff0000 ','#cccccc ','# 0000ff ')의 색상을 사용하려면'), 값 = c (0, 30, 331)/331, 중단 = c (0, 30, 331)) ' –

+0

알아 들었어. 'breaks'와'labels' 인수만을'scale_fill_gradient'에 넣습니다. – Sal

2

scale_fill_gradientn으로 전화를 걸지 않으시겠습니까? 필요에 따라 설정 색상이 중지됩니다. 예를 들면 :는

scale_fill_gradientn(colours = c('#ff0000', '#cccccc', '#0000ff'), values = c(0, 30, 331)) 
+0

감사합니다. 나는 scale_fill_gradientn을 알지 못했다. 이것은'values' 인수에서 범위를 제공 할 수 있지만 어떤 정보도 찾을 수 없다면 아이디어가 될 것입니다. 가능한가? – Sal

+0

추가 정거장을 제공하여 가까이에서 볼 수 있습니다. 예를 들어'values ​​= c (0, 30, 35, 320, 331), colors = c ('red', 'red', 'red', 'green', 'green')' – jdobres