对于digraph,我想使用非正整数作为数字节点 ID。 例如;
A = [-1 1 3];
B = [ 3 2 0];
plot(addedge(digraph, A , B))
如果我运行它,我会收到:
使用 digraph/addedge>validateNodeIDs 时出错(第 155 行)
数字节点 ID 必须是正整数。
虽然,digraph
不允许节点 ID 为非正数,我认为这不是一个好的功能,但我使用以下编程方式使其工作:-
我们要制作有向图的矩阵是:
A = [-1 1 3];
B = [ 3 2 0];
现在,不要使用根据digraph
文档ie的方法plot(addedge(digraph, A , B))
,而是使用以下代码:
ax=plot(addedge(digraph,(-min([A,B])+1)*ones(size(A))+A,(-min([A,B])+1)*ones(size(B))+B));
ax.NodeLabel=strsplit(num2str(min([A,B]):max([A,B])),' ');
此代码适用于每个整数 NodeID,无论是负数、零还是正数。
我在这里使用的策略是操作节点值,使节点的最小值变为 1。当制作有向图时,再次操作节点值以显示实际值。
脚步:-
min([A,B])
A
找到矩阵和的最小值B
。-1
结果与 相加+1
。即-min([A,B])+1
。因此,在上面的示例中,作为 的最小值,[A,B]
它-1
乘以-1
which 给出,+1
然后1
添加到它给出+2
。然后将结果与 相乘ones(size(A))
以获得所有相同数字的矩阵,其大小与 相同A
。所以,在上面的例子中,结果(-min([A,B])+1)*ones(size(A))
是[2 2 2]
现在将结果添加到原始A
矩阵中,使 [A,B] 的最小值等于1
。
ax.NodeLabel=strsplit(num2str(min([A,B]):max([A,B])),' ');
即,使用从 的最小值[A,B]
到最大值的数字数组[A,B]
生成,然后使用min([A,B]):max([A,B])
将其转换为字符串num2str
,然后将结果字符串转换为一个单元格数组,它是设置节点标签的要求。