www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@xregmultigraph2d/private/pr_graphlim.m
function pr_graphlim(gr) %PR_GRAPHLIM Sort out correct limits on axes and colorbar % % PR_GRAPHLIM(GR) sets the correct axes limits and colorbar limits % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. ud = get(gr.axes,'UserData'); data=get(gr.xtext,'UserData'); minmax=ud.limits; xval=get(gr.xfactor,'Value'); % x limits if ~isempty(data) % check minmax for correct size if length(minmax)<size(data,2) minmax(end+1:size(data,2))={0}; elseif length(minmax)>size(data,2) minmax(size(data,2)+1:end)=[]; end if ud.xypossible % Sort out special case xval = max(1,xval-1); end if ischar(minmax{xval}) && strcmp(minmax{xval},'auto') xmn=[]; xmx=[]; elseif all(minmax{xval}==0) xmn=min(data(:,xval)); xmx=max(data(:,xval)); else xmn=min(minmax{xval}); xmx=max(minmax{xval}); end else xmn=0;xmx=1; end % Check type - may be using different data and limits on y axis switch ud.type case 'table' % use same data for y axis % y limits if ~isempty(data) yval=get(gr.yfactor,'Value'); if ischar(minmax{yval}) && strcmp(minmax{yval},'auto') ymn=[]; ymx=[]; elseif all(minmax{yval}==0) ymn=min(data(:,yval)); ymx=max(data(:,yval)); else ymn=min(minmax{yval}); ymx=max(minmax{yval}); end else ymn=0;ymx=1; end % Ensure table axes come within limits, if current factor corresponds % to table axis, and table is present. tud = get(gr.xfactor,'UserData'); if ~isempty(tud) % Check whether table value is being plotted; include values if yval==length(minmax) ymn = min([ymn;tud.values(:)]); ymx = max([ymx;tud.values(:)]); elseif xval==length(minmax) xmn = min([xmn;tud.values(:)]); xmx = max([xmx;tud.values(:)]); end if tud.tfactor_i(xval) axlim = tud.axes{tud.tfactor_i(xval)}; xmn = min([xmn;axlim(:)]); xmx = max([xmx;axlim(:)]); if size(axlim, 1) > 1 axlim = axlim'; end set(gr.axes,'XTick',axlim,... 'XTickLabel',pr_genaxisticklabels(axlim, 4)); else set(gr.axes,'XTickMode','auto','XTickLabelMode','auto'); end if tud.tfactor_i(yval) axlim = tud.axes{tud.tfactor_i(yval)}; ymn = min([ymn;axlim(:)]); ymx = max([ymx;axlim(:)]); if size(axlim, 1) > 1 axlim = axlim'; end set(gr.axes,'YTick',axlim,... 'YTickLabel',pr_genaxisticklabels(axlim, 4)); else set(gr.axes,'YTickMode','auto','YTickLabelMode','auto'); end else set(gr.axes,'XTickMode','auto','XTickLabelMode','auto',... 'YTickMode','auto','YTickLabelMode','auto'); end case 'single' % use same data for y axis % y limits if ~isempty(data) yval=get(gr.yfactor,'Value'); if ischar(minmax{yval}) && strcmp(minmax{yval},'auto') ymn=[]; ymx=[]; elseif all(minmax{yval}==0) ymn=min(data(:,yval)); ymx=max(data(:,yval)); else ymn=min(minmax{yval}); ymx=max(minmax{yval}); end else ymn=0;ymx=1; end set(gr.axes,'XTickMode','auto','XTickLabelMode','auto',... 'YTickMode','auto','YTickLabelMode','auto'); case {'multi','multinoerror'} % use different data and limits data = get(gr.ytext,'UserData'); minmax = ud.ylimits; if ~isempty(data) if ischar(minmax) && strcmp(minmax,'auto') ymn=[]; ymx=[]; elseif length(minmax)~=2 || all(minmax==0) ymn=min(data,[],1); ymx=max(data,[],1); if ud.xypossible % May be X-Y selection yval = get(gr.yfactor,'Value'); switch yval case 1 ymn = min(ymn); ymx = max(ymx); case 2 xmn = ymn(1); xmx = ymx(1); ymn = ymn(2); ymx = ymx(2); otherwise % Error - set to auto ymn = []; ymx = []; end else ymn = min(ymn); ymx = max(ymx); end else ymn=min(minmax); ymx=max(minmax); end else ymn=0;ymx=1; end set(gr.axes,'XTickMode','auto','XTickLabelMode','auto',... 'YTickMode','auto','YTickLabelMode','auto'); end % do sanity check on min,max if ~isempty(xmn) && xmn>=xmx if xmn==0 xmn=-0.01; xmx=0.01; else xmn=(1-sign(xmn).*0.01)*xmx; xmx=(1+sign(xmx).*0.01)*xmx; end end if ~isempty(ymn) && ymn>=ymx if ymn==0 ymn=-0.01; ymx=0.01; else ymn=(1-sign(ymn).*0.01)*ymx; ymx=(1+sign(ymx).*0.01)*ymx; end end % check for NaN's if ~any(isnan([xmn,xmx])) if ~isempty(xmn) % push min and max apart a smidgeon to fix an R12 axes bug delt=(xmx-xmn).*1e-10; xmn=xmn-delt; xmx=xmx+delt; set(gr.axes,'XLim',real([xmn xmx])); else set(gr.axes,'XLimMode','auto'); end end if ~any(isnan([ymn,ymx])) if ~isempty(ymn) % push min and max apart a smidgeon to fix an R12 axes bug delt=(ymx-ymn).*1e-10; ymn=ymn-delt; ymx=ymx+delt; set(gr.axes,'YLim',real([ymn ymx])); else set(gr.axes,'YLimMode','auto'); end end return