我有一个邻接矩阵,并想使用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 代码?