R语言 带对角线的热图

epfja78i  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(158)

我试图从对角线为1的距离矩阵制作热图。实际上,距离矩阵是余弦相似度。我在“factoextra”R包中使用fviz_dist绘制了这个矩阵。我想出了这个图。

余弦相似矩阵

正如你所看到的,对角线表示值0。但是在余弦相似度中,对角线是1,这意味着它们更相似。我如何在图中将值更改为1?

rggaifut

rggaifut1#

TBH,我不确定你在追求什么:这是关于如何绘制热图?还是如何“手工”计算余弦相异性矩阵?无论哪种方式,这里都是一个使用一些样本数据的示例。

# Function to calculate cosine dissimilarity matrix
# Thanks to: https://stats.stackexchange.com/a/149865/121489
cos.sim <- function(ma, mb) {
    mat <- tcrossprod(ma, mb);
    t1 <- sqrt(apply(ma, 1, crossprod));
    t2 <- sqrt(apply(mb, 1, crossprod));
    return(mat / outer(t1, t2));
}

# Generate sample data
set.seed(2017);
x1 <- matrix(rnorm(45), ncol = 5);

# Calculate the cosine dissimilarity matrix
m <- cos.sim(x1, x1);

# Show heatmap
library(tidyverse);
m %>%
    as_tibble() %>%
    rownames_to_column("x1") %>%
    gather(x2, value, 2:10) %>%
    mutate(x2 = gsub("V", "", x2)) %>%
    ggplot(aes(x1, x2)) + geom_tile(aes(fill = value));

字符串


的数据
注意热图中m的1对角线。

相关问题