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
ベストアンサー1
個別の色が必要なのか、それともリストした色が の範囲に沿った単なるマーカーなのかは不明ですY
。両方を示します。
個別の色については、Y1
ジョランの定義に従って使用してください
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 で「darkblue」、2 で「blue」、1 で「lightblue」、0 で「white」などになるような、色の細かい制御が必要な場合は、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")