I have an adjacency matrix in matlab. How do I draw its graph? As I have >500 nodes, I cannot use gplot with random (or grid-like) coordinates.
-
Do you have the bioinformatics toolbox? – Stewie Griffin Oct 19 '13 at 08:57
-
You mean Computational Biology?! Yes! – Mikayel Oct 19 '13 at 10:00
2 Answers
So assuming you have the bioinformatics toolbox, the biograph
function is perfect for what you want to do.
Here's what I have done in the past:
Suppose from
and to
are two vectors containing information regarding the to-from nodes in the system. Then you can create your adjacency matrix this way:
Sys = sparse(from,to,1,s,s);
Adj_mat = tril(Sys + Sys');
I assume you already have your adjacency matrix adj_mat
, in which case all you have to do is the following:
bg = biograph(Adj_mat,[],'ShowArrows','off','ShowWeights','off');
h = view(bg);
I added a few arguments just to illustrate some possibilities. I you want arrows, skip that part.
The nodes will by default be placed according to a "minimum energy" criterion, meaning that the number of "branch crossings" is minimized. The layout is possible to change, adding for instance 'LayoutType','Radial'
.
Check out the documentation for more information.
Here is an example I have created using biograph earlier. It's simple to make the edges straight, or assign different color and weights to the branches. Also, you can create different names to the nodes, or remove the names and just have a "dot" there instead.
EDIT
As an answer to Vincent's question in the comments:
I used set(edges,'LineWidth',1.5)
to set the edge weight. Check out some additional documentation and examples here.
%% Color affected lines:
set(h.nodes(nn),'Color',[0.2 0.8 0.2]);
fowEdges = getedgesbynodeid(h,get(h.Nodes(nn),'ID'));
revEdges = getedgesbynodeid(h,get(h.Nodes(fliplr(nn)),'ID'));
edges = [fowEdges;revEdges];
set(edges,'LineColor',[0.2 0.8 0.2])
set(edges,'LineWidth',1.5)
%% Color faulted line:
set(h.nodes(newFaultNodes),'Color',[1 0.4 0.4]);
fowEdges = getedgesbynodeid(h,get(h.Nodes(newFaultNodes),'ID'));
revEdges = getedgesbynodeid(h,get(h.Nodes(fliplr(newFaultNodes)),'ID'));
edges = [fowEdges;revEdges];
set(edges,'LineColor',[1 0 0])
set(edges,'LineWidth',2)

- 14,889
- 11
- 39
- 70
-
I am aware that the thread is already old, but how did you manage the "thick" lines - haven't seen the particular entry within the documentation… – AnatraIlDuck Aug 04 '14 at 17:56
-
@Vincent, check the update. I believe that's the part of the code I used in order to create the figure above. – Stewie Griffin Aug 04 '14 at 19:20
-
1@Vincent, also check out the example in [this link](http://www.mathworks.se/help/bioinfo/ref/biographobject.html#bqvslwf-10). – Stewie Griffin Aug 04 '14 at 20:46
-
Check out this function: gplot
Example:
% Plot half of a "Bucky ball" carbon molecule, placing asterisks at each node:
k = 1:30;
[B,XY] = bucky;
gplot(B(k,k),XY(k,:),'-*')
axis square

- 77,520
- 72
- 342
- 501
-
-
`gplot(A,Coordinates)` plots a graph of the nodes defined in Coordinates according to the n-by-n adjacency matrix A, where n is the number of nodes. Coordinates is an n-by-2 matrix, where n is the number of nodes and each coordinate pair represents one node. – Franck Dernoncourt Oct 19 '13 at 11:52