Subgraph from selected edges
11 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi, is it possible to extract a subgraph by selecting the edges, instead of nodes? If Yes, how?
H = subgraph(G,nodeIDs)
H = subgraph(G,idx)
0 Commenti
Risposta accettata
Wan Ji
il 20 Ago 2021
Modificato: Wan Ji
il 21 Ago 2021
Note that all the endnodes of some given edges may be repeated, as commented by @Sim. Unique is a good way to solve such problem, to the example provided by Sim, now the code is modified as
clc; close all; clear all;
s = [1 1 1 1 2 2 2 2 2 2 2 2 2 2 15 15 15 15 15];
t = [2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
x = [1 2 0 0 0 1 7 8 9 10 1 2 4 3 5 6 7 8 9 10];
y = [0 1 0 1 2 2 0 1 2 3 4 5 3 5 6 3 4 6 7 8];
G = graph(s,t);
G.Nodes.X = x(:);
G.Nodes.Y = y(:);
EdgeNumber = [1 2 15] ; % the no. of egde
EndNodes = G.Edges.EndNodes(EdgeNumber,:)
H = subgraph(G, unique(EndNodes));
figure
hold on
plot(G,'XData',x,'YData',y,'EdgeColor','blue','LineWidth',1)
h = plot(H,'XData',H.Nodes.X,'YData',H.Nodes.Y,'EdgeColor','red','LineWidth',2);
h.NodeLabel = {};
It is found that this method includes one edge more, i.e. the edge (2,15) in G. This is OK, because what the method provide is the subgraph connected with these 5 nodes.
IF YOU WANT TO get subgraph really by edges. Then
s = [1 1 1 1 2 2 2 2 2 2 2 2 2 2 15 15 15 15 15];
t = [2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
x = [1 2 0 0 0 1 7 8 9 10 1 2 4 3 5 6 7 8 9 10];
y = [0 1 0 1 2 2 0 1 2 3 4 5 3 5 6 3 4 6 7 8];
G = graph(s,t);
G.Nodes.X = x(:);
G.Nodes.Y = y(:);
EdgeNumber = [1 2 15] ; % the no. of egde
EndNodes = G.Edges.EndNodes(EdgeNumber,:);
[q, ~, ic]= unique(EndNodes);
p = 1:1:numel(q);
st = p(reshape(ic,size(EndNodes)));
sub_Graph_by_Egde = graph(st(:,1), st(:,2));
sub_Graph_by_Egde.Nodes.X = G.Nodes.X(q,:);
sub_Graph_by_Egde.Nodes.Y = G.Nodes.Y(q,:);
figure
hold on
plot(G,'XData',x,'YData',y,'EdgeColor','blue','LineWidth',1)
h = plot(sub_Graph_by_Egde,'XData',sub_Graph_by_Egde.Nodes.X,...
'YData',sub_Graph_by_Egde.Nodes.Y,'EdgeColor','red','LineWidth',2);
I think I have solved your problem
3 Commenti
Jothimani V
il 25 Giu 2023
hello sir
how to split subgraphs(by selected edges) from given complete graph in matlab sir?
Più risposte (1)
Wan Ji
il 20 Ago 2021
hi, friend, you can make EdgeNumber an array that contains all the edge numbers that you are interested in. and make the line H = subgraph(G, EndNodes); changed as H = subgraph(G, EndNodes(:));
3 Commenti
Vedere anche
Categorie
Scopri di più su Construction in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!