www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/GraphPlotCustomizationExampleSectionsExample.m

    %% Graph Plotting and Customization
% This example shows how to plot graphs, and then customize the display to
% add labels or highlighting to the graph nodes and edges.

%% Graph Plotting Objects
% Use the |plot| function to plot |graph| and |digraph| objects. By
% default, |plot| examines the size and type of graph to determine which
% layout to use and adds node labels to graphs that have 100 or fewer
% nodes. The node labels use the node names if available; otherwise, the
% labels are numeric node indices.
%
% For example, create a graph using the buckyball adjacency matrix, and
% then plot the graph using all of the default options. If you call |plot|
% and specify an output argument, then the function returns a handle to a
% |GraphPlot| object. Subsequently, you can use this object to adjust
% properties of the plot. For example, you can change the color or style of
% the edges, the size and color of the nodes, and so on.
G = graph(bucky);
p = plot(G)

%%
% After you have a handle to the |GraphPlot| object, use dot indexing to
% access or change the property values. For a complete list of the
% properties that you can adjust, see <docid:matlab_ref.buv5ch6 GraphPlot
% Properties>.
%
% Change the value of |NodeColor| to |'red'|.
p.NodeColor = 'red';

%%
% Determine the line width of the edges.
p.LineWidth

%% Create and Plot Graph
% Create and plot a graph representing an L-shaped membrane constructed
% from a square grid with a side of 12 nodes. Specify an output argument
% with |plot| to return a handle to the |GraphPlot| object.
n = 12;
A = delsq(numgrid('L',n));
G = graph(A,'OmitSelfLoops')

%%
p = plot(G)

%% Change Graph Node Layout
% Use the |layout| function to change the layout of the graph nodes in the
% plot. The different layout options automatically compute node coordinates
% for the plot. Alternatively, you can specify your own node coordinates
% with the |XData|, |YData|, and |ZData| properties of the |GraphPlot|
% object.
%
% Instead of using the default 2-D layout method, use |layout| to specify
% the |'force3'| layout, which is a 3-D force directed layout.
layout(p,'force3')
view(3)


%% Proportional Node Coloring
% Color the graph nodes based on their degree. In this graph, all of the
% interior nodes have the same maximum degree of 4, nodes along the
% boundary of the graph have a degree of 3, and the corner nodes have the
% smallest degree of 2. Store this node coloring data as the variable
% |NodeColors| in |G.Nodes|.
G.Nodes.NodeColors = degree(G);
p.NodeCData = G.Nodes.NodeColors;
colorbar

%% Edge Line Width by Weight
% Add some random integer weights to the graph edges, and then plot the
% edges such that their line width is proportional to their weight. Since
% an edge line width approximately greater than 7 starts to become
% cumbersome, scale the line widths such that the edge with the greatest
% weight has a line width of 7. Store this edge width data as the variable
% |LWidths| in |G.Edges|.
G.Edges.Weight = randi([10 250],130,1);
G.Edges.LWidths = 7*G.Edges.Weight/max(G.Edges.Weight);
p.LineWidth = G.Edges.LWidths;

%% Extract Subgraph
% Extract and plot the top right corner of |G| as a subgraph, to make it
% easier to read the details on the graph. The new graph, |H|, inherits the
% |NodeColors| and |LWidths| variables from |G|, so that recreating the
% previous plot customizations is straightforward. However, the nodes in
% |H| are renumbered to account for the new number of nodes in the graph.
H = subgraph(G,[1:31 36:41]);
p1 = plot(H,'NodeCData',H.Nodes.NodeColors,'LineWidth',H.Edges.LWidths);
colorbar

%% Label Nodes and Edges
% Use |labeledge| to label the edges whose width is larger than |6| with
% the label, |'Large'|. The |labelnode| function works in a similar manner
% for labeling nodes.
labeledge(p1,find(H.Edges.LWidths > 6),'Large')

%% Highlight Shortest Path
% Find the shortest path between node 11 and node 37 in the subgraph, |H|.
% Highlight the edges along this path in red, and increase the size of the
% end nodes on the path.
path = shortestpath(H,11,37)

%%
highlight(p1,[11 37])
highlight(p1,path,'EdgeColor','r')

%%
% Remove the node labels and colorbar, and make all of the nodes black.
p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black';

%%
% Find a different shortest path that ignores the edge weights. Highlight
% this path in green.
path2 = shortestpath(H,11,37,'Method','unweighted')

%%
highlight(p1,path2,'EdgeColor','g')

%% Plotting Large Graphs
% It is common to create graphs that have hundreds of thousands, or even
% millions, of nodes and/or edges. For this reason, |plot| treats large
% graphs slightly differently to maintain readability and performance. The
% |plot| function makes these adjustments when working with graphs that
% have more than 100 nodes:
%
% # The default graph layout method is always |'subspace'|.
% # The nodes are no longer labeled automatically.
% # The |MarkerSize| property is set to |2|. (Smaller graphs have a marker
% size of |4|). 
% # The |ArrowSize| property of directed graphs is set to |4|. (Smaller
% directed graphs use an arrow size of |7|).
%