如何使用向量将网络信息分配给DiagrammeR grViz

时间:2018-07-03 15:07:57

标签: r igraph graphviz digraphs diagrammer

我有一个邻接矩阵,并想使用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的代码,如下所示:     #几个'edge'语句      n_int

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

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

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

0 个答案:

没有答案