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

    function pr_plot(gr,internalset)
%XREGCOLORBAR/PRIVATE/PR_PLOT   Private function
%   This is a private xregcolorbar function used to return cmap

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


if nargin<2
    internalset = 0;
end

data = get(gr.colorbar.frame1,'UserData');
labels = get(gr.colorbar.frame2,'UserData');
c=get(gr.cfactor,'Value');

ud=get(gr.ctext,'UserData');
if isempty(data)
    ud.coldata = [];
    ud.cmax = []; ud.cmin = [];
    ud.inds = [];
else
    cdata=data(:,c);
    
    % if range limiter is checked, need to reduce all data here
    clim=ud.clim;
    ud.cdata = cdata;
    if get(gr.colorbar.userange,'Value') && ud.limitenable
        cmax=get(gr.colorbar.maxrange,'UserData');
        cmin=get(gr.colorbar.minrange,'UserData');
        % convert to actual units
        ylim=get(gr.colorbar.axes,'YLim');
        cmax=clim(1)+(clim(2)-clim(1))*(cmax-ylim(1))/(ylim(2)-ylim(1));
        cmin=clim(1)+(clim(2)-clim(1))*(cmin-ylim(1))/(ylim(2)-ylim(1));
        maxind = find(cdata>cmax)';
        minind = find(cdata<cmin)';
        ud.cmax = cmax; ud.cmin = cmin;
        ud.inds=setdiff(1:length(cdata),[maxind minind]);
        switch ud.limitstyle
        case {'exclude','normal'}
        case {'color','limit'}
            clim = [cmin cmax];
        end
        cdata=cdata(ud.inds);
    else
        ud.cmax = clim(2); ud.cmin = clim(1);
        ud.inds = 1:length(cdata);
    end
    
    % set colours for colorbar
    cmap=get(gr.colorbar.bar,'FaceVertexCData');
    n=size(cmap,1);
    mn=clim(1);mx=clim(2);
    % work out cdata - needs to be one for each vertex (zdata)
    edges=linspace(mn,mx,n+1);
    ud.edges = [-inf edges(2:end-1) inf];
    if ~isempty(cdata)
        [nul,bin]=histc(cdata,ud.edges);
        bin(bin==0)=1;
    else
        bin=[];
    end
    
    % reshape cmap ready.
    ud.coldata=cmap(bin(:),:);
end

set(gr.ctext,'UserData',ud);

% set axis labels
lbls=get(gr.colorbar.axes,'Title');
if ~isempty(labels)
    set(lbls,'String',labels(c), 'Interpreter', 'none');
else
    set(lbls,'String','');
end

% fire callback here...
ud = get(gr.patch,'UserData');
cb = ud.callback;
vis = get(gr.colorbar.userange,'UserData');
if ~isempty(cb) && strcmp(vis,'on') && (~internalset || ud.setcallback)
    % don't fire callback if not visible
    % Don't fire cb if cbmode=external and this is internal call.
    xregcallback(cb);
end