如何在有向图函数中使用非正整数作为数字节点 ID?

How to use non-positive integer as numeric node ID in digraph function?

对于digraph,我想使用非正整数作为数字节点ID . 例如;

A = [-1  1  3];
B = [ 3  2  0];
plot(addedge(digraph, A , B))

如果我运行这个,我收到这个:

Error using digraph/addedge>validateNodeIDs (line 155)

Numeric node IDs must be positive integers.

尽管 digraph 不允许节点 ID 为非正数,我认为这不是一个好功能,但我已经使用以下编程方式使其工作:-

我们要制作有向图的矩阵是:

A = [-1  1  3];
B = [ 3  2  0];

现在不使用根据 digraph's documentation 的方法,即 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。并且在制作有向图时,再次操作节点值以显示实际值。

步骤:-

  1. min([A,B]) 找到矩阵 AB.
  2. 的最小值
  3. -1相乘,结果与+1相加。即 -min([A,B])+1。因此,在上面的示例中,由于 [A,B] 的最小值是 -1,它与 -1 相乘得到 +1,然后将 1 添加到其中这给出了 +2.
  4. 结果再与ones(size(A))相乘得到矩阵 所有与 A 大小相同的数字。所以,在上面的例子中,(-min([A,B])+1)*ones(size(A))的结果是[2 2 2]

  5. 现在将结果添加到原来的A矩阵中,使得[A,B]的最小值等于1

  6. 对矩阵 B 进行相同的操作。
  7. 现在,当最终用操纵的节点 ID 制作有向图时,它的 ID 使用以下方法更正:ax.NodeLabel=strsplit(num2str(min([A,B]):max([A,B])),' '); 即使用 min([A,B]):max([A,B]) 生成从最小值 [A,B] 到最大值 [A,B] 的数字数组,然后使用 num2str 将其转换为字符串, 这是设置节点标签的要求。

输出:-