31

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
4

2 に答える 2

47

個別の色が必要なのか、リストする色がの範囲に沿った単なるマーカーであるのかは明確ではありませんY。両方を表示します。

離散色の場合Y1、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

-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")

ここに画像の説明を入力してください

マッピングが3で「ダークブルー」、2で「ブルー」、1で「ライトブルー」、0で「ホワイト」など、色の詳細な制御が必要な場合は、次の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")

于 2012-07-20T18:38:01.163 に答える
27

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

まず、を使用して、適切な範囲でcutファクターを作成します。Y

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")

ここに画像の説明を入力してください

この配色は、ローエンドの青よりも紫がかっていますが、醸造所のパレットの中で私が見つけたものに最も近いものです。

独自の色を作成したい場合は、引数scale_fill_manualに目的の色のベクトルを使用して指定するだけです。values

于 2012-06-11T14:42:16.570 に答える