File: cspy.m

package info (click to toggle)
suitesparse 1%3A7.10.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 254,920 kB
  • sloc: ansic: 1,134,743; cpp: 46,133; makefile: 4,875; fortran: 2,087; java: 1,826; sh: 996; ruby: 725; python: 495; asm: 371; sed: 166; awk: 44
file content (100 lines) | stat: -rw-r--r-- 2,766 bytes parent folder | download | duplicates (2)
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