-4
我试图在“R与两个不同的相关矩阵中制作相关性热图”,下三角形应该对应不同的矩阵和上三角形,有100个基因,我做了基因芯片和转录组,现在我想在单个热图中绘制两个不同的三角形 Thanx提前“R”中具有两个不同相关矩阵但行名相同的单相关热图
我试图在“R与两个不同的相关矩阵中制作相关性热图”,下三角形应该对应不同的矩阵和上三角形,有100个基因,我做了基因芯片和转录组,现在我想在单个热图中绘制两个不同的三角形 Thanx提前“R”中具有两个不同相关矩阵但行名相同的单相关热图
您可以通过首先创建一个相关矩阵,你想使用,然后从你的组合相关矩阵绘制热图。
首先,我将生成两个随机数据集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))