2012-06-11 2 views
21

ggplot2에서 히트 맵을 만들고 싶습니다. 내 장난감 데이터 및 코드는 다음과 같습니다ggplot2 원거리 값의 색상이있는 히트 맵

set.seed(12345) 
dat <- 
    data.frame(
     Row = rep(x = LETTERS[1:5], times = 10) 
    , Col = rep(x = LETTERS[1:10], each = 5) 
    , Y = rnorm(n = 50, mean = 0, sd = 1) 
    ) 
library(ggplot2) 
p <- ggplot(data = dat, aes(x = Row, y = Col)) + 
     geom_tile(aes(fill = Y), colour = "white") + 
     scale_fill_gradient(low = "white", high = "steelblue") 
p 

는이 같은 원거리 값 색 구성표를 갖고 싶어 :

-3 <= Y < -2 ---> Dark Blue 
-2 <= Y < -1 ---> Blue 
-1 <= Y < 0 ---> Light Blue 
0 <= Y < 1 ---> Light Green 
1 <= Y < 2 ---> Green 
2 <= Y <= 3 ---> Dark Green 

어떤 도움이 높게 평가 될 것입니다. 감사합니다.

답변

15

몇 가지 옵션이 있지만 여기에는 하나의 시작점이 있습니다.

첫째, 적절한 범위로 Y로부터 계수를 생성 할 cut을 사용

ggplot(data = dat, aes(x = Row, y = Col)) + 
     geom_tile(aes(fill = Y1), colour = "white") + 
     scale_fill_brewer(palette = "PRGn") 

enter image description here

이 색상 :

dat$Y1 <- cut(dat$Y,breaks = c(-Inf,-3:3,Inf),right = FALSE) 

그때 에서 RColorBrewer 팔레트를 사용하여 플롯 구성표는 로우 엔드에서는 파란색보다 자주색이지만 C 내가 양조장 팔레트에서 찾을 수있는 가장 적음.

직접 만들려는 경우 scale_fill_manual을 사용하고 values 인수에 원하는 색상 벡터를 지정할 수 있습니다.

+0

덕분에 귀하의 회신 @joran. 두 개의 직사각형 사이의 선을 제거하는 방법을 궁금합니다. 감사합니다 – MYaseen208

+0

@ MYaseen208'geom_tile'에'color = "transparent"를 설정하십시오. – joran

+0

고맙습니다. @ or란. 매우 감사. – MYaseen208

38

개별 색상을 원하거나 목록에있는 색상이 Y 범위의 마커 일지는 확실하지 않습니다. 나는 둘 다 보여줄 것이다. joran 그것을 정의로 개별 색상에 대한

dat$Y1 <- cut(dat$Y,breaks = c(-Inf,-3:3,Inf),right = FALSE) 

그런 다음 당신은 특정 색상으로 플롯을 얻을 수 Y1 사용하면 수동 규모

p <- ggplot(data = dat, aes(x = Row, y = Col)) + 
     geom_tile(aes(fill = Y1)) + 
     scale_fill_manual(breaks=c("\[-Inf,-3)", "\[-3,-2)", "\[-2,-1)", 
           "\[-1,0)", "\[0,1)", "\[1,2)", 
           "\[2,3)", "\[3, Inf)"), 
         values = c("white", "darkblue", "blue", 
            "lightblue", "lightgreen", "green", 
            "darkgreen", "white")) 
p 

I을 사용하여 목록 -3과 3을 넘는 색상에 대해 내가 원하는 것을 모르기 때문에 흰색을 사용했습니다.

네거티브의 파란색에서 0의 흰색까지, 양수의 녹색으로 갈 때, scale_fill_gradient2이 작동합니다.

ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = Y)) + 
    scale_fill_gradient2(low="darkblue", high="darkgreen", guide="colorbar") 

enter image description here

당신은 매핑 "darkblue"는 0, 1에서 2에서 3에서 "흰색", "연한 파랑" "블루"가되도록, 색상의 세밀한 제어를 원하는 경우 등, 다음 scale_fill_gradientn 당신을 위해 작동합니다

library("scales") 
ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = Y)) + 
    scale_fill_gradientn(colours=c("darkblue", "blue", "lightblue", 
           "white", 
           "lightgreen", "green", "darkgreen"), 
         values=rescale(c(-3, -2, -1, 
             0, 
             1, 2, 3)), 
         guide="colorbar") 

+0

멋진 답변을 해주신 Brian 씨께 감사드립니다. 당신은 ggplot2의 마법사입니다.도움을 많이 주셨습니다. – MYaseen208