web-dev-qa-db-ja.com

範囲値の色付きの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

どんな助けも大歓迎です。ありがとう

26
MYaseen208

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

まず、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")

enter image description here

この配色は、ローエンドでは青よりも紫ですが、醸造パレットの中で最も近い色です。

独自に構築したい場合は、単にscale_fill_manualおよびvalues引数に希望する色のベクトルを指定します。

21
joran