IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
data_draw_scatter_2d.m
Go to the documentation of this file.
1 %>@ingroup datasettools
2 %>@file
3 %>@brief Draws 2-D scatter plot
4 
5 %> @param data dataset
6 %> @param idx_fea What features to use. Numbers point to columns in @c data.X
7 %> @param confidences a list of percentages (]0, 1[) for the confidence ellipses
8 %> @param textmode=0
9 %> @arg 0 - no text anotation
10 %> @arg 1 - annotates "obsnames"
11 %> @arg 2 - annotates "groupcodes"
12 function data_draw_scatter_2d(data, idx_fea, confidences, textmode)
13 if ~exist('confidences', 'var')
14  confidences = [];
15 end;
16 if ~exist('textmode', 'var')
17  textmode = 0;
18 end;
19 
20 if any(idx_fea > data.nf)
21  irerror(sprintf('Dataset has only %d feature(s)!', data.nf));
22 end;
23 
24 mins = min(data.X(:, idx_fea), [], 1);
25 maxs = max(data.X(:, idx_fea), [], 1);
26 lens = maxs-mins;
27 
28 pieces = data_split_classes(data);
29 no_classes = size(pieces, 2);
30 no_fea = length(idx_fea);
31 
32 i_count = 1;
33 for ix = 1:no_fea-1
34  for iy = ix+1:no_fea
35  if no_fea > 2
36  subplot(no_fea-1, no_fea-1, (iy-2)*(no_fea-1)+ix);
37  end;
38 
39  ihandle = 1;
40  for i = 1:no_classes
41  X = pieces(i).X(:, idx_fea([ix iy]));
42 
43  hh = plot(X(:, 1), X(:, 2), 'Color', find_color(i), 'Marker', find_marker(i), 'MarkerFaceColor', find_color(i), 'LineStyle', 'none', 'MarkerSize', find_marker_size(i));
44  if ~isempty(hh)
45  handles(ihandle) = hh(1);
46  ihandle = ihandle+1;
47  end;
48  hold on;
49 
50 
51  if textmode == 1 && ~isempty(pieces(i).obsnames)
52  text(X(:, 1), X(:, 2), pieces(i).obsnames); %, 'FontName', FONT, 'FontSize', FONTSIZE*.7);
53  elseif textmode == 2 && ~isempty(pieces(i).groupcodes)
54  text(X(:, 1), X(:, 2), pieces(i).groupcodes);
55  end;
56 
57  % ellipses
58  if ~isempty(confidences)
59  m = mean(X);
60  C = cov(X);
61  for j = 1:length(confidences)
62  error_ellipse(C, m, 'conf', confidences(j), 'Color', find_color(i), 'LineWidth', scaled(2));
63  end;
64  end;
65  end
66 
67  feanames = data.get_fea_names([idx_fea(ix) idx_fea(iy)]);
68  if iy == ix+1
69  title(feanames{1});
70  end;
71  if ix == 1
72  ylabel(feanames{2});
73  end;
74  if i_count == 1
75  l = legend(handles, data_get_legend(data));
76  if is_2014() % Working around changes in R2014a
77  prop = 'Position';
78  else
79  prop = 'OuterPosition';
80  end;
81 
82  carmelia = get(l, prop);
83  wi = carmelia(3);
84  he = carmelia(4);
85  set(legend, prop, [.9, .9, 0, 0]+[-wi, -he, wi, he]);
86  end;
87  if iy < no_fea % || 1
88  set(gca, 'XTick', []);
89  end;
90  if ix > 1 % || 1
91  set(gca, 'YTick', []);
92  end;
93  format_frank();
94  K = 0.05;
95  xlim([mins(ix)-lens(ix)*K, maxs(ix)+lens(ix)*K]);
96  ylim([mins(iy)-lens(iy)*K, maxs(iy)+lens(iy)*K]);
97 
98  i_count = i_count+1;
99  end;
100 end;
function find_marker(in i)
function find_color(in i)
function irerror(in s)
function find_marker_size(in i)
function data_get_legend(in data)
function scaled(in i)
function data_draw_scatter_2d(in data, in idx_fea, in confidences, in textmode)
function is_2014()
function data_split_classes(in data, in hierarchy)
function format_frank(in F, in scale, in handles)