Тепловая карта со значениями (ggplot2)
Я видел тепломассы со значениями, сделанными в различных графических системах R, включая решетку и базу следующим образом:
![enter image description here]()
Я склонен немного использовать ggplot2
и хотел бы иметь возможность сделать карту нагрева с соответствующими значениями ячейки, нанесенными на график. Здесь тепловое отображение и попытка с использованием geom_text
:
library(reshape2, ggplot2)
dat <- matrix(rnorm(100, 3, 1), ncol=10)
names(dat) <- paste("X", 1:10)
dat2 <- melt(dat, id.var = "X1")
p1 <- ggplot(dat2, aes(as.factor(Var1), Var2, group=Var2)) +
geom_tile(aes(fill = value)) +
scale_fill_gradient(low = "white", high = "red")
p1
#attempt
labs <- c(apply(round(dat[, -2], 1), 2, as.character))
p1 + geom_text(aes(label=labs), size=1)
Обычно я могу определить значения x и y для передачи, но я не знаю в этом случае, так как эта информация не сохраняется в наборе данных. Как разместить текст на тепловой карте?
Ответы
Ответ 1
Это обновлено, чтобы соответствовать принципам tidyverse и улучшить плохое использование ggplot2
В комментарии SlowLeraner я легко мог это сделать:
library(tidyverse)
## make data
dat <- matrix(rnorm(100, 3, 1), ncol=10)
## reshape data (tidy/tall form)
dat2 <- dat %>%
tbl_df() %>%
rownames_to_column('Var1') %>%
gather(Var2, value, -Var1) %>%
mutate(
Var1 = factor(Var1, levels=1:10),
Var2 = factor(gsub("V", "", Var2), levels=1:10)
)
## plot data
ggplot(dat2, aes(Var1, Var2)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = round(value, 1))) +
scale_fill_gradient(low = "white", high = "red")
![введите описание изображения здесь]()
Ответ 2
Существует еще один более простой способ составления тепловых карт со значениями. Для этого вы можете использовать pheatmap.
dat <- matrix(rnorm(100, 3, 1), ncol=10)
names(dat) <- paste("X", 1:10)
install.packages('pheatmap') # if not installed already
library(pheatmap)
pheatmap(dat, display_numbers = T)
Это даст вам такой сюжет, как этот
![Heatmap with values]()
Если вы хотите удалить кластеризацию и использовать свою цветовую схему, вы можете сделать
pheatmap(dat, display_numbers = T, color = colorRampPalette(c('white','red'))(100), cluster_rows = F, cluster_cols = F, fontsize_number = 15)
![heatmap without clustering and red white colors]()
Вы также можете изменить размер шрифта, формат и цвет отображаемых чисел.