R中的热图(使用heatmap()函数)

时间:2015-02-11 14:40:54

标签: r heatmap

我有一个相关矩阵,想要获得从冷(负相关)到红色(正相关)的热图,白色为0相关。

现在,热图命令似乎以某种方式平均,即使我说'scale = none',这意味着平均相关性被描绘为白色(在我的情况下,这是0.2,意味着所有0相关略微蓝色)。

你可以帮我解决这个问题吗?谢谢

library(stats)
library(gplots)
library(RColorBrewer)
heatmap(graph.g,Colv = NA, Rowv=NA, revC=T, scale='none', 
    xlab= "IDS-C30 symptoms", main = "Heatmap of glasso associations",
    col = rev(brewer.pal(11,"RdBu")))

enter image description here

2 个答案:

答案 0 :(得分:2)

对于相关矩阵,您还可以使用专为此目的而设计的corrplotcorrgram库。它们开箱即用,还具有其他绘图功能。在 R Graphics Cookbook 中,您可以找到examples如何使用geom_tile()geom_raster()函数使用ggplot2绘制此类情节。

library(corrplot)
library(corrgram)
library(ggplot2)
library(reshape2)

corrplot(cor(mtcars))
corrplot(cor(mtcars), method="color")
corrgram(cor(mtcars))
corrgram(cor(mtcars), lower.panel=panel.shade,
         upper.panel=panel.pie)

p <- ggplot(melt(cor(mtcars)), aes(x=Var1, y=Var2, fill=value))
p + geom_tile() + scale_fill_gradient2(midpoint=0, limits=c(-1, 1))

enter image description here enter image description here enter image description here enter image description here enter image description here

答案 1 :(得分:1)

这不是一个优雅的解决方案,但它似乎完成了工作。要点是将频谱限制为相关矩阵所采用的值,并且为了使这更平滑,调色板从brewer.pal提供的11值最大值拉伸(使用奇数个重复,以便中位数保持不变整数)。

vec <- rep(rev(brewer.pal(11,"RdBu")), each = 101)  # stretched palette
med <- (length(vec) + 1) / 2  # middle of palette
rad <- length(vec) - med  # radius of palette
min.g <- med + min(graph.g) * rad  # lowest value taken
max.g <- med + max(graph.g) * rad  # highest value taken
heatmap(graph.g,Colv = NA, Rowv=NA, revC=T, scale='none',
    xlab= "IDS-C30 symptoms", main = "Heatmap of glasso associations",
    col = vec[min.g:max.g])  # palette restricted to realized values