Matlab 如何使用循环标记图形边?
我正在使用Matlab 如何使用循环标记图形边?,matlab,plot,graph,matlab-figure,Matlab,Plot,Graph,Matlab Figure,我正在使用for循环在绘图上添加更多节点和边。但是,在新边上添加标签时,旧标签将被删除。我不知道如何保留旧的边缘标签,也不知道如何存储labeledge的结果 这就是我目前所得到的 for r = 1: 10 for j = 1:10 H = addnode(P,nodeName{r}{j}); P = addedge(H, s{r}{j}, t{r}{j}, w{r}{j}); figure; hold on;
for
循环在绘图上添加更多节点和边。但是,在新边上添加标签时,旧标签将被删除。我不知道如何保留旧的边缘标签,也不知道如何存储labeledge
的结果
这就是我目前所得到的
for r = 1: 10
for j = 1:10
H = addnode(P,nodeName{r}{j});
P = addedge(H, s{r}{j}, t{r}{j}, w{r}{j});
figure;
hold on;
h = plot(P);
labeledge(h,s{r}{j},t{r}{j},labelText{r}{j})
end
end
每次在新的绘图中,我只能看到最新的标签簇,而旧标签则消失了。理想情况下,我希望保持labeledge
的结果,但是保持不能这样做。我需要在循环的每个步骤中显示标签,因此添加另一个整体labeledge
不是我理想的解决方案。任何暗示都将不胜感激
编辑:所有我的变量都是单元格数组中大小不同的多个单元格。我使用for
循环来帮助从单元格中提取向量,因为我不知道如何将这些单元格数组中的所有级别的信息插入addNode
函数 尝试删除“图;”命令退出FOR循环,并尝试查看此操作是否有效。代码中的主要问题是您一次又一次地绘制图形。这是没有必要的。相反,使用一个循环来创建图形对象(G
),然后一次全部打印,然后使用另一个循环来标记图形:
P = graph;
for r = 1: 10
for j = 1:10
P = addedge(P, s{r}{j}, t{r}{j}, w{r}{j});
end
end
h = plot(P);
for r = 1: 10
for j = 1:10
labeledge(h,s{r}{j},t{r}{j},labelText{r}{j})
end
end
如果您希望在每次迭代时绘制图形,可以使用子图:
for k = 1:height(P.Nodes)
H = subgraph(P,1:k);
figure;
h = plot(H);
c = 1;
out = false;
for r = 1: 10
if ~out
for j = 1:10
if c < k
labeledge(h,c,labelText{r}{j})
else
out = true;
break
end
c = c+1;
end
else
break
end
end
end
我确实得到了更多的标签,但不是所有的(很奇怪,我正试图找出原因)。但是,如果没有“figure”,我无法在循环过程中获得绘图。在进入FOR循环之前,请删除它并放置“figure”。此外,正如EBH所要求的,请尝试不要将FOR与所有节点一起使用。你可以创建一个节点向量,把它们放在没有FOR循环的地方(但你也需要提供绘图的数据集)。我会尝试遍历所有单元格,挑选出要绘图的相关数据(节点编号、链接到的下一个节点编号、边线长度等)并将其放在带有适当标签的表格中-此后处理任务将有助于以后在一个绘图处绘制。在这个阶段,我会在某个分支上从“叶子”的开始运行到结束,然后迭代到另一个分支,并一次又一次地这样做,直到所有叶子都出现在绘图上。也许这会帮助你:[link]()为什么你要使用for
循环并将所有节点添加到一起?我正在构建一个像树一样的网络。每个节点都有自己的分支和叶子(新节点)。FOR循环帮助我将树抬高并长出更多的叶子。为什么您首先在中为H
分配一个新节点:H=addnode(P,nodeName{r}{j})
然后用:P=addedge(H,s{r}{j},t{r}{j},w{r}{j})将其分配回P
代码>?另外,我认为您的节点名部分被这个过程覆盖了。您可以添加边列表,也可以添加具有节点名称的邻接矩阵。@EBH邻接矩阵似乎可行。在这个过程中,我确实有重复的节点名称,我将在矩阵中反映重复。非常感谢你的想法!一旦成功,我会和你一起更新。您可以使用,而不仅仅是矩阵。2.您可以用上面的代码在ND数组中表示一个多级单元数组,只要它的所有分支具有相同的形状。@YolandaWang太棒了!将绘图保持在循环中会得到什么?循环中的图形用于测试网络是否正常工作。否则,我将失去最终图形的解释,因为它太复杂,无法解释read@YolandaWang我在答案中添加了另一部分,用于在循环中绘制一个不断增长的图形。
C = [s{:}]; % and the same for t and w
while any(cellfun(@iscell,C))
C = vertcat(C{:});
end
C = cellfun(@(x) x(:),C,'UniformOutput', false);
S = vertcat(C{:});
Labels = [labelText{:}]; % and the same nodeName
while any(cellfun(@iscell,Labels))
Labels = vertcat(Labels{:});
end