# Subgraph from selected edges

1 view (last 30 days)

Show older comments

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 Comments

### Accepted Answer

Wan Ji
on 20 Aug 2021

Edited: Wan Ji
on 21 Aug 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

### More Answers (1)

Wan Ji
on 20 Aug 2021

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!