对于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乘以-1which 给出,+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,然后将结果字符串转换为一个单元格数组,它是设置节点标签的要求。