我想在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
任何帮助将受到高度赞赏 . 谢谢
2 回答
对于像这样的东西你有几种选择,但这里有一个作为起点 .
首先,使用
cut
从Y
创建具有适当范围的因子:然后使用 RColorBrewer 中的调色板绘制:
这个配色方案在低端比紫色更蓝,但它是我在Brewer调色板中找到的最接近的颜色 .
如果你想构建自己的,你可以简单地使用
scale_fill_manual
并为values
参数指定所需的颜色矢量 .目前尚不清楚您是否需要离散颜色,或者您列出的颜色是否只是
Y
范围内的标记 . 我会同时展示 .对于离散颜色,请使用
Y1
,因为joran定义它然后,您可以使用手动刻度获得具有您列出的特定颜色的绘图
我不知道你想要的超过-3和3的颜色,所以我用白色 .
如果你想要一个连续的颜色,从负片上的蓝色到0上的白色到正片上的绿色,
scale_fill_gradient2
会起作用 .如果你想要精细的颜色细节控制,那么映射是"darkblue"在3,"blue"在2,"lightblue"在1,"white"在0等,那么
scale_fill_gradientn
将适合你: