2

我正在尝试从使用 package.json 函数生成的 ggplot 中获取矩阵(有序相异矩阵fviz_distfactoextra

根据我的原始数据,我使用 dis.cor 生成了一个距离相关矩阵(我需要使用 spearman 相关系数),如下所示:

dist.cor<-get_dist(b, method = "spearman")

c<-round(as.matrix(dist.cor)[1:nrow(b),1:nrow(b)],1)

但是这个矩阵没有排序,所以你无法可视化集群。

然后,使用函数 fviz_dist 我可以生成距离相关矩阵(有序)的 ggplot:

fviz_dist(dist.cor)

但我不需要图像,我需要数据框或矩阵格式的有序矩阵,因此我可以使用 write.csv 将其导出并在 excel 中打开以使用它。

谢谢!

4

1 回答 1

0

您可以从 ggplot 对象中提取数据:

library(factoextra)
library(tidyr)
dist.cor = get_dist(mtcars,method="spearman")
g = fviz_dist(dist.cor)

在此处输入图像描述

变量名称已经被分解和排序:

head(g$data)
             Var1        Var2       value
1     Volvo 142E- Volvo 142E- 0.000000000
2      Fiat X1-9- Volvo 142E- 0.006904570
3       Fiat 128- Volvo 142E- 0.006904570
4 Toyota Corolla- Volvo 142E- 0.006904570
5    Honda Civic- Volvo 142E- 0.009174312
6  Porsche 914-2- Volvo 142E- 0.018254605

head(levels(g$data$Var1))
[1] "Volvo 142E-"     "Fiat X1-9-"      "Fiat 128-"       "Toyota Corolla-"
[5] "Honda Civic-"    "Porsche 914-2-" 

head(levels(g$data$Var2))
[1] "Volvo 142E-"     "Fiat X1-9-"      "Fiat 128-"       "Toyota Corolla-"
[5] "Honda Civic-"    "Porsche 914-2-"

所以这是一个旋转它的问题:

head(mat)
mat = pivot_wider(g$data,values_from="value",names_from="Var2")

# A tibble: 6 x 33
  Var1    `Volvo 142E-` `Fiat X1-9-` `Fiat 128-` `Toyota Corolla… `Honda Civic-`
  <fct>           <dbl>        <dbl>       <dbl>            <dbl>          <dbl>
1 Volvo …       0            0.00690     0.00690          0.00690        0.00917
2 Fiat X…       0.00690      0           0                0              0.0254 
3 Fiat 1…       0.00690      0           0                0              0.0254 
4 Toyota…       0.00690      0           0                0              0.0254 
5 Honda …       0.00917      0.0254      0.0254           0.0254         0      
6 Porsch…       0.0183       0.0252      0.0252           0.0252         0.0274 
于 2022-01-04T10:10:31.987 回答