2015-02-11 122 views
0

我有一個相關矩陣,並希望獲得從冷(負相關)到紅(正相關)的熱圖,其中白色爲0相關。R中的熱圖(使用heatmap()函數)

現在,即使我說'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

對於相關矩陣,你還可以使用那些特別爲此設計corrplotcorrgram庫。他們開箱即用,還具有額外的繪圖功能。在R Graphics Cookbook中,您可以找到examples如何使用ggplot2使用geom_tile()geom_raster()函數繪製這種繪圖。

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

這不是一個完美的解決方案,但它似乎把工作做好。要點是要將光譜限制到相關矩陣所取的值,並使其更平滑,調色板從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 
+0

驚人的,謝謝! – Torvon 2015-02-11 17:36:29