Get node names after a graph condensation
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
stam dadi
il 4 Dic 2017
Commentato: Waseem AL Aqqad
il 27 Nov 2021
I have an adjacency matrix adj and a cellarray nodeManes that contains names that will be given to the graph G that will be constructed from adj
So I use
G = digraph(adj,nodeNames);
And I get the following graph :
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/170618/image.png)
Now , I want to find the strongly connected components in G and do a graph condensation so I use the following :
C = condensation(G);
p2 = plot(C);
So I get the following graph :
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/170619/image.png)
So I have 6 strongly connected components , but my problem is that I lost the node names , I want to get something like :
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/170620/image.png)
Is that any way to get the nodes names in the result of the condentation ?
Thanks.
0 Commenti
Risposta accettata
Christine Tobler
il 4 Dic 2017
Here is some code that does this:
bins = conncomp(G);
compNames = cell(max(bins), 1);
for ii=1:length(bins)
if isempty(compNames{bins(ii)})
compNames{bins(ii)} = G.Nodes.Name{ii};
else
compNames{bins(ii)} = [compNames{bins(ii)} ', ' G.Nodes.Name{ii}];
end
end
C.Nodes.Name = compNames;
plot(C);
There's no one-line command to combine several node names based on the vector of bins used in condensation, so I wrote a for-loop to do this instead.
2 Commenti
Più risposte (1)
Walter Roberson
il 4 Dic 2017
Stealing basic technique from Christine, and reworking it without a loop:
bins = conncomp(G);
temp = accumarray(bins.', (1:length(bins)).', [], @(IDX) {G.Nodes.Name(IDX)});
C.Nodes.Name = cellfun(@(CS) strjoin(CS, ', '), temp, 'uniform', 0);
10 Commenti
Vedere anche
Categorie
Scopri di più su Directed Graphs 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!