www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph2d/private/pr_factorsort.m

    function pr_factorsort(gr)
%PR_FACTORSORT
%
%  Private function for sorting out any mismatch between data length and
%  number of given factors

%  Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc.


ud = gr.DataPointer.info;
data=ud.data;
sd=size(data,2);
factors=ud.factors;
labels=get(gr.xfactor,'String');
if iscell(labels)
    labels=labels{1};
end

if (isempty(factors) || (iscell(factors) && isempty(factors{1})))
    factors = {};
end

% factors may be two cell arrays: one for the rows when in image
% mode.  That isn't needed here.
if ~isempty(factors) && iscell(factors{1})
    factors=factors{1};
end

% get current factor selection values
vals=get([gr.xfactor;gr.yfactor],{'Value'});

% check values
vals=cat(1,vals{:});
if strcmp(labels,' ') && all(vals==1)
    % assume a new-graph case: initialise factor numbers sequentially
    vals(:)=sd;
    vals(1:sd)=1:sd;
    vals=vals(1:2);
else
    vals(vals>sd)=sd;
end
vals = max(vals, 1);
vals=num2cell(vals);


% sort out labels to match data
if sd==0
    lbls = {' '};
elseif length(factors)>=sd
    lbls = factors(1:sd);
elseif length(factors)<sd
    lbls = cellstr([repmat('col',sd,1) num2str((1:sd)')]);
    lbls(1:length(factors)) = factors;
end
lbls=repmat({lbls},[2 1]);
set([gr.xfactor;gr.yfactor],{'String','Value'},[lbls,vals]);