2017-04-26 7 views
2

값의 히트 맵이 필요합니다. 히트 맵을 파란색에서 낮은 값 (샘플 코드에서는 0)으로, 녹색 값은 높은 값 (샘플 코드에서 75)으로 변경합니다. 그러나 데이터에는 75보다 큰 값이 포함되어 있습니다. 75보다 큰 값을 모두 빨간색으로 채우고 싶습니다.ggplot2 개별 캡이있는 채우기 그라디언트

요약하면 채우기를 0부터 75까지 파란색에서 녹색으로, 75보다 큰 모든 값을 빨간색으로 채우기를 원합니다. 제가 지금 일종의 코드를 사용하지만 빨강에서 빨강에 이르기까지 76-100의 값으로 여전히 녹색에서 빨간색으로 확장됩니다.

게시글 (Brian Diggs)의 답변 (ggplot2 heatmap with colors for ranged values)을 사용했지만 그 대답은 그라디언트 눈금의 값을 초과하는 모든 값을 채우는 것과 관련이 없습니다.

게시물 (ggplot geom_point() with colors based on specific, discrete values)은 geom_point와 매우 비슷한 질문에 답하는 것 같지만 geom_tile에 적용하는 데 문제가 있습니다.

아래 샘플 코드는 도움이되었습니다.

#Check packages to use in library 
{ 
    library('ggplot2') 
    library('scales') 
} 

#Data 

horizontal_position <- c(-2, -1, 0, 1, 2) 
vertical_position <- c(-2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2) 
data_val <- sample(0:100, 25) 
all_data <-data.frame(horizontal_position, vertical_position, data_val) 

    all_data %>% 
     ggplot(aes(horizontal_position, vertical_position)) + 
     geom_tile(aes(fill = data_val), colour = "transparent") + 
     geom_text(aes(label = data_val),colour="white")+ 
     scale_fill_gradientn(colours = c("blue", "lightblue", "lightgreen", "green", "red"), 
          breaks=c(0,25,50,75,Inf), 
          guide = "colorbar") 

답변

2

여기있는 색상 그림 부분적인 해결책,이다하지만 완전히 정확하지 전설 잎 :

all_data %>% 
    mutate(val2 = replace(data_val, data_val > 75, NA)) %>% 
    ggplot(aes(horizontal_position, vertical_position)) + 
    geom_tile(aes(fill = val2), colour = "transparent") + 
    geom_text(aes(label = data_val),colour="white")+ 
    scale_fill_gradientn(colours = c("blue", "lightblue", "lightgreen", "green"), 
         breaks=c(0,25,50,75,Inf), 
         na.value = "red") 

enter image description here

트릭은 NA로 범위를 벗어날 값을 설정하는 것입니다, 대부분의 미적 척도에는 특별한 선택 가치가 있습니다. 물론, 실제 데이터에 실제 데이터가있는 경우이 문제가 발생합니다. 앞에서 언급했듯이 컬러 바에 표시되도록하는 것이 또 다른 과제입니다.

편집 추가 : 빠른 검색은 몇 가지 솔루션을 가져 : 솔루션은 잘 작동 Add a box for the NA values to the ggplot legend for a continous map

+1

그건, 내 유일한 코멘트는 특정 값의 그늘이 다른 값에 달려 있다는 것입니다. 즉,이 솔루션을 확장하여 0에서 100까지 25 개의 데이터 요소 집합을 각각 포함하는 두 개의 항목이있는 경우 값 43은 항목 1에 대해 43의 값이 항목 2에 대해 가질 수있는 색조가 다를 수 있습니다. 다른 24 개의 데이터 포인트는 무엇입니까? 이것은 데이터 값을 기반으로하지 않고 다른 데이터 포인트를 기준으로 위치를 조정하는 것입니다. 이 문제에 대한 또 다른 질문을하고 있습니다. – User247365

+1

그 간단한 수정은'breaks = c (0,25,50,75, Inf)'다음에'limits = c (0,75)'를 추가하는 것입니다. 이는 동일한 색상 막대를 항상 반환하도록 크기를 제한합니다. 그러나 나는 당신의 관찰이 올바르지 않다고 생각합니다 : 43은 다른 값과 관계없이 항상 라이트 블루에서 라이트 그린으로 72 % 매핑됩니다. 유일한 차이점은 다른 값이 색상 막대에 표시되는지 여부입니다. – Brian

+0

그것으로 놀고 난 후에, 당신은 당신의 관찰에서 옳았다. 그러나 'limits'는 당신이 원하는 수정이다. – Brian

관련 문제