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