⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scatterdui.m

📁 这个为模式识别工具箱
💻 M
字号:
% SCATTERDUI Scatter plot with user interactivity%%   SCATTERDUI (A)%   SCATTERDUI (A,DIM,S,CMAP,FONTSIZE,'label','both','legend','gridded')%% INPUT%    DATA  Dataset%   ...    See SCATTERD%% OUTPUT%% DESCRIPTION% SCATTERDUI is a wrapper around SCATTERD (see SCATTERD for the options). If% the user clicks on a sample in the plot, the corresponding index in a% dataset is written nearby. A right-button click clears all printed indices. % Buttons along axes allow for browsing through the dataset dimensions. % Selected points are remembered when the plotted dimension changes.%% SEE ALSO% SCATTERD % This script is based on the segmentgui of Cris Luengo % <cris@ph.tn.tudelft.nl>.% Copyright: Pavel Paclik, pavel@ph.tn.tudelft.nl% Faculty of Applied Sciences, Delft University of Technology% P.O. Box 5046, 2600 GA Delft, The Netherlands% $Id: scatterdui.m,v 1.7 2004/05/10 11:25:40 pavel Exp $function fig_hnd=scatterdui (varargin)	prtrace (mfilename);	% First argument is dataset.	a = varargin{1};	% Place all remaining arguments in a string, for the call to SCATTERD.	args = '';	for i = 2:size(varargin,2)		eval(sprintf('p%d = varargin{%d};',i,i)); args = [args sprintf(',p%d',i)];	end	% Are we called through one of the callback handles?	if (ischar(a)) 		switch (a)		 case 'denclick_scatter'		  scatterdui_inspect;		 case 'scatterdui_change_dim'		  scatterdui_change_dim(varargin{2});		end		return	end	% Get figure handle, clear window and start new axis.	%	fig_hnd = gcf; clf; ui_data.axis = subplot(1,1,1);         % open a new figure        figure; fig_hnd = gcf; ui_data.axis = subplot(1,1,1); 	% tag this figure	set(fig_hnd,'tag','scatterdui');	set(fig_hnd,'busyaction','cancel','DoubleBuffer','on');		% Call SCATTERD.	ui_data.args = args; eval(['scatterd(a' args,');']);	% Store the data for later reference.	ui_data.a = a;		% Define viable neighborhood for sample ID back-reading.	range_x = get(ui_data.axis,'xlim'); range_y = get(ui_data.axis,'ylim');	ui_data.neighborhood = [0.01*abs(range_x(1)-range_x(end)) ...		    0.01*abs(range_y(1)-range_y(end))];	ui_data.point_id = []; ui_data.text_hnd = [];	% Add callback function to axis.	set(ui_data.axis,'ButtonDownFcn','scatterdui(''denclick_scatter'')');	set(get(ui_data.axis,'Children'),'ButtonDownFcn','scatterdui(''denclick_scatter'')');	% Initialise current X- and Y-dimensions.	ui_data.xdim = 1; ui_data.ydim = 2;	% Place buttons for increasing/decreasing the dimensions (features) of 	% the dataset shown on the X- and Y-axes of the plot.	pos = get(fig_hnd,'position');	ui_data.x_dim_inc = uicontrol('style','pushbutton', ...				      'string','->', ...				      'units','normalized', ...				      'position',[0.9 0.02 0.05 0.05], ...				      'callback','scatterdui(''scatterdui_change_dim'',''xinc'')');	ui_data.x_dim_dec = uicontrol('style','pushbutton', ...				      'string','<-', ...				      'units','normalized', ...				      'position',[0.85 0.02 0.05 0.05], ...				      'callback','scatterdui(''scatterdui_change_dim'',''xdec'')');	ui_data.y_dim_inc = uicontrol('style','pushbutton', ...				      'string','^', ...				      'units','normalized', ...				      'position',[0.02 0.9 0.05 0.05], ...				      'callback','scatterdui(''scatterdui_change_dim'',''yinc'')');	ui_data.y_dim_dec = uicontrol('style','pushbutton', ...				      'string','v', ...				      'units','normalized', ...				      'position',[0.02 0.85 0.05 0.05], ...				      'callback','scatterdui(''scatterdui_change_dim'',''ydec'')');	% Draw feature labels.	featlabs = getfeat(ui_data.a);	if (isnumeric(featlabs)), featlabs = num2str(featlabs); end;	xlabel(sprintf('%d : %s',ui_data.xdim,featlabs(ui_data.xdim,:)));	ylabel(sprintf('%d : %s',ui_data.ydim,featlabs(ui_data.ydim,:)));	% Save user interface data into figure window. First clear it, to	% avoid a (sometimes) very slow update.	set(fig_hnd,'userdata',[]); set(fig_hnd,'userdata',ui_data); 	hold on;	if nargout == 0		clear('fig_hnd');	end		return	% SCATTERDUI_CHANGE_DIM (CODE)%% Call-back for the buttons in the window: increases or decreases the% feature number (dimension) the plot represents on the x- or y-axis. CODE% can be 'xinc', 'xdec', 'yinc', 'ydec'.function scatterdui_change_dim (code)	fig_hnd = gcbf; ui_data = get(fig_hnd,'userdata');	[m,k,c] = getsize(ui_data.a);	% Increase/decrease feature shown in X- or Y-axis. Loop around:	% feature k+1 -> 1, features 1-1 -> k.	switch (code)	 case 'xinc'	  ui_data.xdim = ui_data.xdim + 1;	  if (ui_data.xdim > k)   ui_data.xdim = 1; end			 case 'xdec'	  ui_data.xdim = ui_data.xdim - 1;	  if (ui_data.xdim == 0), ui_data.xdim = k; end	 case 'yinc'	  ui_data.ydim = ui_data.ydim + 1;	  if (ui_data.ydim > k),  ui_data.ydim = 1; end	 case 'ydec'	  ui_data.ydim = ui_data.ydim - 1;	  if (ui_data.ydim == 0), ui_data.ydim = k; end	end	% Redraw figure.	cla; ui_data.axis = subplot(1,1,1);	% I had to add this to make it work!!!:	scatterd(ui_data.a(:,[1 1]));		eval(['scatterd(ui_data.a(:,[ui_data.xdim,ui_data.ydim])' ui_data.args,');']);	% Draw feature labels.	featlabs = getfeat(ui_data.a);	if (isnumeric(featlabs)), featlabs = num2str(featlabs); end;%PP!! deal with cell labels here: I don't know how, yet	if (iscellstr(featlabs))	   featlabs = (1:size(featlabs,1))'; 	   featlabs = num2str(featlabs);	end	xlabel(sprintf('%d : %s',ui_data.xdim,featlabs(ui_data.xdim)));	ylabel(sprintf('%d : %s',ui_data.ydim,featlabs(ui_data.ydim)));	% Define viable neighborhood for sample ID back-reading.	range_x = get(ui_data.axis,'xlim'); range_y = get(ui_data.axis,'ylim');	ui_data.neighborhood = [0.01*abs(range_x(1)-range_x(end)) ...		    0.01*abs(range_y(1)-range_y(end))];	 	% Redraw selected points.	ui_data.text_hnd = ...	    scatterdui_add_labels(ui_data.point_id, ...				  +ui_data.a(:,[ui_data.xdim,ui_data.ydim]), ...				  ui_data.neighborhood );		% Add callback function to axis.	set(ui_data.axis,'ButtonDownFcn','scatterdui(''denclick_scatter'')');	set(get(ui_data.axis,'Children'),'ButtonDownFcn',...			  'scatterdui(''denclick_scatter'')');		% Save user interface data into figure window.   	set(fig_hnd,'userdata',[]); set(fig_hnd,'userdata',ui_data); 	return	% SCATTERDUI_INSPECT%% Callback for mouse-click in axis. Finds all samples in the neighbourhood% of the clicked point and plots them, with text labels containing the index.% Right-click clears all selected points.function scatterdui_inspect	fig_hnd = gcbf; ui_data = get(fig_hnd,'userdata');	if (strcmp(get(fig_hnd,'SelectionType'),'alt'))		% Clear all selected points.		delete(ui_data.text_hnd); ui_data.text_hnd = []; ui_data.point_id = [];	else		point = get(ui_data.axis,'CurrentPoint');		% Get all points close to the selected point from the dataset.		% 'Close' means inside a box around POINT defined by UI_DATA.NEIGHBORHOOD.		a = +ui_data.a; a = a(:,[ui_data.xdim,ui_data.ydim]);		ind = find((a(:,1) >= (point(1) - ui_data.neighborhood(1))) & ...			   (a(:,1) <= (point(1) + ui_data.neighborhood(1))) & ...			   (a(:,2) >= (point(3) - ui_data.neighborhood(2))) & ...			   (a(:,2) <= (point(3) + ui_data.neighborhood(2))));		% If any points fall inside the box, plot them and add them (and their		% text handles) to the user interface data.		if (length(ind) > 0)			text_hnd = scatterdui_add_labels(ind,a,ui_data.neighborhood);			ui_data.point_id = [ui_data.point_id ind'];			ui_data.text_hnd = [ ui_data.text_hnd text_hnd ];		end	end	% Save user interface data into figure window.   	set(fig_hnd,'userdata',[]); set(fig_hnd,'userdata',ui_data); 	return	% HND = SCATTERDUI_ADD_LABELS (IND,DATA,NEIGHBORHOOD)%% Plots samples with indices IND in DATA, and places the indices as text% labels next to the points (at a (x,y)-distance defined by NEIGHBORHOOD).% Returns handles to all text labels in HND.function hnd = scatterdui_add_labels (ind,data,neighborhood)	hold on;	% Plot the data points, plus their index in the dataset as text.	hnd = plot(data(ind,1),data(ind,2),'gh');	for i = 1:length(ind)		hnd=[hnd text(data(ind(i),1) + neighborhood(1), ...			      data(ind(i),2) + neighborhood(2), ...			      sprintf('%d',ind(i)))];	end	% Add callback function to each of the texts.	set(hnd,'ButtonDownFcn','scatterdui(''denclick_scatter'')');	return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -