2016-12-27 114 views

回答

1

您可以通过首先创建一个相关矩阵,你想使用,然后从你的组合相关矩阵绘制热图。

首先,我将生成两个随机数据集ta,所以我们将有两个相关矩阵组合。

set.seed(24601) 
# generate random data for first correlation matrix 
m <- matrix(runif(25, min = -1, max = 1), ncol = 5) 
cov1 <- m %*% t(m) # make it symmetrical and positive definite 
df1 <- mnormt::rmnorm(n = 100, varcov = cov1, sqrt=NULL) 
colnames(df1) <- paste("X", 1:5, sep = "_") 
# generate random data for second correlation matrix 
m <- matrix(runif(25, min = -1, max = 1), ncol = 5) 
cov2 <- m %*% t(m) 
df2 <- mnormt::rmnorm(n = 100, varcov = cov2, sqrt=NULL) 
colnames(df2) <- paste("X", 1:5, sep = "_") 

获取两个相关矩阵:

cor1 <- cor(df1) 
cor2 <- cor(df2) 

从一个相关矩阵与所述下从其他联合上部三角形:

cor_combined <- cor1 
cor_combined[upper.tri(cor_combined)] <- cor2[upper.tri(cor2)] 
diag(cor_combined) <- NA # remove diagonal for better plotting (optional) 

绘制热图,示出这里使用ggplot2 。由于ggplot()通常对长格式的数据效果最好,因此我使用gather来重新格式化数据---用于绘图的数据帧的前六行显示在head()命令之后。

cor_df <- as.data.frame(cor_combined) %>% 
    dplyr::mutate(var1 = row.names(.)) %>% 
    tidyr::gather("var2", "value", -var1) 

> head(cor_df) 
    var1 var2  value 
1 X_1 X_1   NA 
2 X_2 X_1 -0.62115508 
3 X_3 X_1 0.65660075 
4 X_4 X_1 -0.24248121 
5 X_5 X_1 -0.67412086 
6 X_1 X_2 -0.01013485 

ggplot(cor_df, aes(var1, var2)) + 
    geom_tile(aes(fill = value), colour = "white") + 
    scale_fill_gradient(low = "darkred", high = "navy") + 
    scale_x_discrete(expand = c(0, 0)) + 
    scale_y_discrete(expand = c(0, 0)) + 
    labs(x=NULL, y=NULL) + 
    theme(legend.position = "none", 
     axis.ticks = element_blank(), 
     axis.text.x = element_text(angle = 60, hjust = 1)) 

heatmap from two different correlation matrices

相关问题