Code covered by the BSD License  

Highlights from
Statistical Learning Toolbox

from Statistical Learning Toolbox by Dahua Lin
Functions for statistical learning, pattern recognition and computer vision, covering many topics.

sldrawgraph(G, X, Xt, ppedges, ppsn, pptn)
function h = sldrawgraph(G, X, Xt, ppedges, ppsn, pptn)
%SLDRAWGRAPH Draws a graph
%
% $ Syntax $
%   - sldrawgraph(G, X)
%   - sldrawgraph(G, X, Xt)
%   - sldrawgraph(G, X, [], ppedges)
%   - sldrawgraph(G, X, [], ppedges, ppsn)
%   - sldrawgraph(G, X, Xt, ppedges)
%   - sldrawgraph(G, X, Xt, ppedges, pptn)
%   - h = sldrawgraph(...)
%
% $ Arguments $
%   - G:        The graph in any acceptable form
%   - X:        The sample matrix of (source) nodes (2xn or 3xn)
%   - Xt:       The sample matrix of (target) nodes (2xn or 3xn)
%   - ppedges:  The cell array of parameters for plotting graph edges
%   - ppsn:     The cell array of parameters for plotting source nodes
%   - pptn:     The cell array of parameters for plotting target nodes
%   - h:        The vector of handles to all plotted objects
%
% $ Description $
%   - sldrawgraph(G, X) draws a graph with the coordinates of the 
%     graph nodes given in X (a 2 x n matrix for 2D points or 3 x n
%     matrix for 3D points), using default plotting parameters.
%
%   - sldrawgraph(G, X, Xt) draws a bigraph using default plotting
%     parameters.
%
%   - sldrawgraph(G, X, [], ppedges) draws a graph using the specified
%     parameters to draw edges.
%
%   - sldrawgraph(G, X, [], ppedges, ppsn) draws a graph using the 
%     specified parameters to draw edges and nodes.
%
%   - sldrawgraph(G, X, Xt, ppedges) draws a bigraph using the specified
%     parameters to draw edges.
%
%   - sldrawgraph(G, X, Xt, ppedges, ppsn, pptn) draws a bigraph using the 
%     specified parameters to draw edges and nodes.
%
%   - h = sldrawgraph(...) returns the handles to the plotted objects.
%
% $ History $
%   - Created by Dahua Lin, on Sep 11st, 2006
%

%% parse and verify input arguments

if nargin < 2
    raise_lackinput('sldrawgraph', 2);
end

EG = sledgeset(G, 'off');
gi = slgraphinfo(EG);
n = gi.n;
nt = gi.nt;

d = size(X, 1);
if ~isnumeric(X) || ndims(X) ~= 2 || (d ~= 2 && d ~= 3)
    error('sltoolbox:invalidarg', ...
        'The X should be a 2D numeric matrix, and should have 2 or 3 rows.');
end

if nargin < 3 || isempty(Xt)
    Xt = X;
    bi = false;
else
    if ~isnumeric(Xt) || ndims(Xt) ~= 2
        error('sltoolbox:invalidarg', ...
            'The X should be a 2D numeric matrix, and should have 2 or 3 rows.');
    end
    if size(Xt, 1) ~= d
        error('sltoolbox:sizmismatch', ...
            'The sample dimensions in Xt is not the same as X');
    end
    bi = true;
end

if size(X, 2) ~= n || size(Xt, 2) ~= nt
    error('sltoolbox:sizmismatch', ...
        'The size of graph is not consistent with the sample numbers');
end


if nargin < 4 || isempty(ppedges)
    ppedges = {};
end

if nargin < 5 || isempty(ppsn)
    ppsn = {};
end

if nargin < 6 || isempty(pptn)
    pptn = ppsn;
end

if nargout >= 1
    output_h = true;
else
    output_h = false;
end

%% Prepare Data for plotting 

% produce pruned NaN-separated coordinate list

edges = EG.edges;
edges = slpruneedgeset(n, nt, edges);

I = edges(:,1);
J = edges(:,2);
nedges = length(I);

xc = [X(1, I); Xt(1, J); NaN(1, nedges)];
xc = xc(:);
yc = [X(2, I); Xt(2, J); NaN(1, nedges)];
yc = yc(:);
if d == 3
    zc = [X(3, I); Xt(3, J); NaN(1, nedges)];
    zc = zc(:);
end

%% plot edges

% plot the edges
if d == 2
    ch = plot(xc, yc, ppedges{:});
else
    ch = plot3(xc, yc, zc, ppedges{:});
end
if output_h
    h = ch;
end
clear xc yc zc;

%% plot source nodes

if ~isempty(ppsn)
    ppsn = [ppsn, {'LineStyle', 'none'}];
    hold on;
    if d == 2
        ch = plot(X(1,:), X(2,:), ppsn{:});
    else
        ch = plot3(X(1,:), X(2,:), X(3,:), ppsn{:});
    end
    if output_h
        h = [h; ch];
    end
end

%% plot target nodes

if bi && ~isempty(pptn)
    pptn = [pptn, {'LineStyle', 'none'}];
    hold on;
    if d == 2
        ch = plot(Xt(1,:), Xt(2,:), pptn{:});
    else
        ch = plot3(Xt(1,:), Xt(2,:), Xt(3,:), pptn{:});
    end
    if output_h
        h = [h; ch];
    end
end

   

Contact us at files@mathworks.com