SPYDEMO
Contents
Purpose
help spy
SPY Visualize sparsity pattern.
SPY(S) plots the sparsity pattern of the matrix S.
SPY(S,'LineSpec') uses the color and marker from the line
specification string 'LineSpec' (See PLOT for possibilities).
SPY(S,markersize) uses the specified marker size instead of
a size which depends upon the figure size and the matrix order.
SPY(S,'LineSpec',markersize) sets both.
SPY(S,markersize,'LineSpec') also works.
Reference page in Help browser
doc spy
We consider several ways to 'prettify' spy output, all using colored squares to denote elements of S.
Input matrix
n = 4; k = 5; S = rand(n,k); S(S < .3) = 0
S =
0.95 0.89 0.82 0.92 0.94
0 0.76 0.44 0.74 0.92
0.61 0.46 0.62 0 0.41
0.49 0 0.79 0.41 0.89
Formatting
xlim = [.5 k+.5]; ylim = [.5 n+.5]; touchup = ['set(gca,''XTick'',1:k,''YTick'',1:k,''XLim'',xlim,''YLim'',ylim), ' ... 'xlabel(''Column''), ' ... 'ylabel(''Row''), ' ... 'set(gcf,''Color'',''w'')']
touchup =
set(gca,'XTick',1:k,'YTick',1:k,'XLim',xlim,'YLim',ylim), xlabel('Column'), ylabel('Row'), set(gcf,'Color','w')
SPY with no customization
figure spy(S) eval(touchup)
SPY with 'square' marker
figure
spy(S,'ks',40)
eval(touchup)
SPY with 'square' marker and fill
figure spy(S,'ks',40) set(get(gca,'Children'),'MarkerFaceColor','g') eval(touchup)
PLOT with 'square' marker
- Returns handles of individual squares, whose color, size or line style can be used to communicate additional information, as below. With spy, all symbols have to be the same
figure h = nan*S; for i = 1:n for j = 1:k if S(i,j) ~= 0 e = 'k'; f = S(i,j)*[0 1 0]; else e = 'w'; f = 'w'; end h(i,j) = plot(j,i,'s','MarkerEdgeColor',e,'MarkerFaceColor',f,'MarkerSize',40); hold on end end set(gca,'YDir','reverse') eval(touchup)
BAR3: a view from above
- Works if S values are non-negative. z-axis minimum must be set above zero, but below the smallest non-zero element - below, we choose 10^(-6)
- Automatically sizes squares
- Places squares more compactly than spy or plot
- Color-codes columns. (This may be undesirable, and difficult to change - see below)
- Returns handles to created surface objects, allowing one to modify squares' appearance - however, not as easily as with plot
figure h = bar3(S,.8); a = gca; set(a,'CameraPosition',[mean(xlim) mean(ylim) 4],... 'CameraUpVector',[0 -1 5], ... 'Box','on', ... 'YDir','reverse', ... 'ZLim',[1e-6 1]) eval(touchup)
