【问题标题】:Heatmap in R (using the heatmap() function)R 中的热图(使用 heatmap() 函数)
【发布时间】:2015-02-11 14:40:53
【问题描述】:

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

现在,即使我说“scale=none”,heatmap 命令似乎以某种方式平均,这意味着平均相关性被描绘为白色(在我的情况下,它是 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")))

【问题讨论】:

    标签: r heatmap


    【解决方案1】:

    对于相关矩阵,您还可以使用专门为此目的设计的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))
    

    【讨论】:

      【解决方案2】:

      这不是一个优雅的解决方案,但它似乎可以完成工作。要点是将频谱限制为相关矩阵所取的值,并使其更平滑,调色板从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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 2012-09-20
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多