1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
function [s,M,H] = cspy (A,res)
%CSPY plot a matrix in color.
% cspy(A) plots a matrix, in color, with a default resolution of
% 256-by-256. cspy(A,res) changes the resolution to res. Zero entries are
% white. Entries with tiny absolute value are light orange. Entries with
% large magnitude are black. Entries in the midrange (the median of the
% log10 of the nonzero values, +/- one standard deviation) range from light
% green to deep blue. With no inputs, the color legend of cspy is plotted.
% [s,M,H] = cspy(A) returns the scale factor s, the image M, and colormap H.
%
% The matrix A can be full or sparse, and either numeric (double, single,
% integer) or character type, and either complex or real.
%
% Example
% A = delsq (numgrid ('L', 10)) ;
% cspy (A) ;
%
% See also CS_DMSPY, SPY.
% CXSparse, Copyright (c) 2006-2022, Timothy A. Davis. All Rights Reserved.
% SPDX-License-Identifier: LGPL-2.1+
if nargin < 2
res = 256 ;
end
h = jet (64) ;
h = h (64:-1:1,:) ;
h = h (30:end,:) ;
hmax = size (h,1) ;
h (1,:) = [1 1 1] ; % white for zero
h (2,:) = [1 .9 .5] ; % light orange for tiny entries
h (hmax,:) = [0 0 0] ; % black for very large entries
colormap (h) ;
if (nargin == 0)
image (1:hmax) ;
title ('cspy color map') ;
return
end
% convert complex, integers, and strings to real double
if (~isreal (A) | ~isa (A, 'double') | ~issparse (A)) %#ok
A = sparse (abs (double (A))) ;
end
[m1 n1] = size (A) ;
if (m1 == 0 | n1 == 0) %#ok
A (1,1) = 0 ;
end
[m1 n1] = size (A) ;
S = cs_thumb (A,res) ; % get the thumbnail of the matrix
[m n] = size (S) ;
[i j x] = find (S) ;
x = log10 (x) ;
if (isempty (x))
S = zeros (size (S)) ;
else
med = median (x) ;
sdev = std (x) ;
big = med + sdev ;
tiny = med - sdev ;
imid = find (x > tiny & x < big) ;
itiny = find (x <= tiny) ;
ibig = find (x >= big) ;
x (imid) = 1 + ceil ((hmax-2) * (x (imid) - tiny) / (big - tiny)) ;
x (itiny) = 1 ; %#ok
x (ibig) = hmax-1 ; %#ok
S = full (1 + sparse (i,j,x,m,n)) ;
% title (sprintf ('tiny: %-8.2g median: %-8.2g big: %-8.2g\n', ...
% 10^tiny, 10^med, 10^big)) ;
end
% draw the matrix
image (S) ;
axis equal ;
axis ([-1 n+1 -1 m+1]) ;
axis off
% draw a box around the whole matrix
e = ceil (max (m1,n1) / max (m,n)) ; % scale factor
hold on
drawbox (1,m1+1,1,n1+1,'k',1,e) ;
hold off
% return results
if (nargout > 0)
s = e ;
end
if (nargout > 1)
M = S ; % image
end
if (nargout > 2)
H = h ; % colormap
end
|