2012-06-11 4 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

このようなものにはいくつかのオプションがありますが、ここでは開始点として1つあります。

まず、適切な範囲でYから因子を作成するcutを使用:

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

そしてRColorBrewerからパレットを使用してプロット:

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

enter image description here

この色をスキームはローエンドの青よりも紫ですが、それはcです私は醸造所のパレットの中で見つけることができます。

自分で構築したい場合は、scale_fill_manualを使用して、values引数に必要な色のベクトルを指定するだけです。

+0

おかげでお返事を@joran。私はプロットの2つの長方形の間の線をどのようにクリアするのだろうかと思います。 Thanks – MYaseen208

+0

@ MYaseen208 'geom_tile'に' color = "transparent" 'を設定します。 – joran

+0

ありがとう@ヨラン。とても有難い。 – MYaseen208

38

離散的な色が必要な場合や、指定した色がYの範囲にあるマーカーだけであるかどうかは不明です。私は両方を表示します。

離散色については

、joranは

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

それを定義するようそして、あなたは私が

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 

マニュアルスケールを使用して一覧表示し、特定の色でプロットを得ることができますY1を使用あなたが-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

関連する問題