geom_tile

ggplot でヒートマップを描くとき geom_tile を利用する。geom_tile を利用する場合、クラスタリングが行われないので、予めクラスタリングを行ってその並び順を取得する必要がある。

サンプルデータを読み込んで、ggplot 用のデータフレームに整形する。

library(ggplot2)
library(reshape2)

data <- read.table("https://stat.biopapyrus.net/data/arraydata.txt", header = TRUE)
data <- as.matrix(data)

df           <- melt(data)
colnames(df) <- c("Gene", "Group", "Value")

次にクラスタリングを行い、その結果に従いデータの順序を並べ替える。

dev.new()
clr <- heatmap(data, scale = "none")
dev.off()

gene.idx  <- rownames(data)[clr$rowInd]
group.idx <- colnames(data)[clr$colInd]

df$Gene  <- factor(df$Gene, levels = gene.idx)
df$Group <- factor(df$Group, levels = group.idx)

最後に geom_tile を利用してヒートマップを仕上げる。

ghm <- ggplot(df, aes(x = Group, y = Gene, fill = Value))
ghm <- ghm + geom_tile()
ghm <- ghm + theme_bw()
ghm <- ghm + theme(plot.background = element_blank(),
                   panel.grid.minor = element_blank(),
                   panel.grid.major = element_blank(),
                   panel.background = element_blank(),
                   axis.line = element_blank(),
                   axis.ticks = element_blank(),
                   strip.background = element_rect(fill = "white", colour = "white"),
                   axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
ghm <- ghm + scale_fill_gradientn("value", colours = rev(brewer.pal(9, "Spectral")), na.value = "white")
ghm <- ghm + xlab("Group") + ylab("Gene")
ghm