samer@57
|
1 function [NN,map1,map2]=hist2d(X,m1spec,m2spec,varargin)
|
samer@57
|
2 % hist2d - 2D histogram
|
samer@57
|
3 %
|
samer@57
|
4 % hist2d ::
|
samer@57
|
5 % [[N,2]] ~'N rows of 2D data',
|
samer@57
|
6 % (K1:natural | dmap(K1)) ~'num bins for dim 1, or bins',
|
samer@57
|
7 % (K2:natural | dmap(K2)) ~'num bins for dim 1, or bins'
|
samer@57
|
8 % -> [[K1,K2]->natural] ~'bin counts',
|
samer@57
|
9 % dmap(K1),
|
samer@57
|
10 % dmap(K2).
|
samer@57
|
11 %
|
samer@57
|
12 % if second map spec is empty, it means use the same map
|
samer@57
|
13 % for both dimensions.
|
samer@57
|
14
|
samer@57
|
15 mins=min(X); mm=max(X); maxs=mm+eps(mm);
|
samer@57
|
16 map1=mkdmap(mins(1),maxs(1),m1spec,[]);
|
samer@57
|
17 map2=mkdmap(mins(2),maxs(2),m2spec,m1spec);
|
samer@57
|
18
|
samer@57
|
19 N=accumhist([map1(X(:,1)) map2(X(:,2))],1,[cardr(map1) cardr(map2)]);
|
samer@57
|
20 if nargout==0,
|
samer@57
|
21 opts=prefs('cmap',@(t)log(1+t),varargin{:});
|
samer@57
|
22 imagexy(centres(map2),centres(map1),opts.cmap(N));
|
samer@57
|
23 else
|
samer@57
|
24 NN=N;
|
samer@57
|
25 end
|
samer@57
|
26
|
samer@57
|
27
|
samer@57
|
28 function M=mkdmap(min,max,spec,def)
|
samer@57
|
29 if isempty(spec), spec=def; end
|
samer@57
|
30 if isa(spec,'dmap') % is alread a dmap
|
samer@57
|
31 M=spec;
|
samer@57
|
32 elseif length(spec)==1, % spec=number of bins
|
samer@57
|
33 M=linmap(min,max,spec);
|
samer@57
|
34 else
|
samer@57
|
35 error('invalid discretisation map');
|
samer@57
|
36 end
|
samer@57
|
37
|