ggplot2 heatmap с цветами для значений диапазона

Я хочу сделать плагин в 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  Dark Blue -2 <= Y  Blue -1 <= Y  Light Blue 0 <= Y  Light Green 1 <= Y  Green 2 <= Y  Dark Green 

Любая помощь будет высоко оценена. благодаря

У вас есть несколько вариантов для чего-то подобного, но вот один из них является отправной точкой.

Во-первых, используйте 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 .

Непонятно, хотите ли вы дискретные цвета или если цвета, которые вы перечисляете, являются только маркерами по диапазону 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") 

введите описание изображения здесь

Если вам нужен тонкий контроль над цветом, так что отображение «darkblue» на 3, «синий» на 2, «lightblue» на 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") 

Давайте будем гением компьютера.