1

我有一个邻接矩阵,并想使用DiagrammeR Graphviz语言来创建它的有向图。

贝娄是我的邻接矩阵MM

MM<-matrix(c(1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1), 5, byrow=T)
colnames(MM)<-c("A", "B", "C", "D", "E")
row.names(MM)=colnames(MM)
MM
  A B C D E
A 1 1 0 0 0
B 1 1 1 1 0
C 0 1 1 1 0
D 0 1 0 1 1
E 0 0 0 1 1

获取有关 DiagrammeR 站点diagrammeR Docs的信息,我可以使用以下代码创建有向图:

grViz("
digraph boxes_and_circles {

      # a 'graph' statement
      graph [overlap = true, fontsize = 10]

      node [shape = circle,
      fixedsize = true,
      width = 0.9] // sets as circles
        A; B; C; D; E



      # several 'edge' statements
      A->A A->B B->A B->B B->C B->D C->B C->C C->D D->B D->D D->E E->D E->E
    }")

这可以很好地从 中创建有向图MM,但正如您所见,描述所有节点,以及更大代码的所有节点交互将变得过于繁琐,我们的想法是简化它。

所以,我的想法是使用向量来指示节点和节点交互,但这是我失败的地方。我尝试使用igraph将邻接矩阵转换MM为图形格式,并从那里提取节点交互并尝试将该信息分配给前面的代码。以下是我用于此的代码:

graphMM <- graph_from_adjacency_matrix(MM, mode = c("directed"),
        weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA)
edgesMp<-as_edgelist(graphMM)
n_int<-c(0)
for(i in 1:nrow(edgesMM)){
    n_int[i]<-paste(edgesMM[i,1], edgesMM[i,2], sep = "->")}
n_int
 [1] "A->A" "A->B" "B->A" "B->B" "B->C" "B->D" "C->B" "C->C" "C->D" "D->B"
[11] "D->D" "D->E" "E->D" "E->E"

我试图将n_int向量分配给以下代码grViz: # 几个“边缘”语句 n_int

但这只会打印单词n_int加上指示的节点,每个节点都在一个圆圈内,而没有实际使用n_int信息来绘制节点之间的连接。

我知道在DiagrammeR 现场显示了另一种创建有向图(graph_creation)的形式,它允许使用向量指示信息,但该版本不允许为节点方向构建子图(例如,与生态学中的营养级别相对应的图级别)我需要。

所以我的问题是,有谁知道如何使用向量将节点名称及其连接分配给 grViz 代码?

4

0 回答 0